2012-10-29 14 views
5

पर क्लैंग के साथ सी ++ 11 प्रोग्राम संकलित करने में त्रुटि मैंने विंडोज़ पर क्लैंग 3.2 बनाया है और एक सरल हैलो वर्ल्ड प्रोग्राम बनाने की कोशिश कर रहा था। लेकिन मुझे नीचे देखी गई त्रुटियों की तरह बहुत सारी त्रुटियां मिलती हैं।विंडोज़

d:\Marius\xyz>clang++ -stdlib=libc++ -std=c++11 -Wall xyz.cpp -o xyz.exe 
clang++: warning: argument unused during compilation: '-stdlib=libc++' 
In file included from xyz.cpp:12: 
In file included from ./stdafx.h:18: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility:8: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility:8: 
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:1072: 
33: error: 
    '_Ty' does not refer to a value 
      _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty) 
             ^

... 

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef:540:50: note: 
     expanded from macro '_VARIADIC_EXPAND_4' 
#define _VARIADIC_EXPAND_4(FUNC, X1, X2, X3, X4) \ 
               ^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap:222:22:note: 
     expanded from macro '_CLASS_RESULT_OF_PMF_OPT_0X' 
         __thiscall, X2, X3, X4) 
             ^
fatal error: too many errors emitted, stopping now [-ferror-limit=] 
20 errors generated. 

मुझे वीसी ++ 2012 हेडर से आने वाली कई त्रुटियां मिलती हैं। विंडोज़ पर क्लैंग ++ के साथ सी ++ 11 कोड बनाने के लिए क्या संभव है? क्या मुझे अतिरिक्त कमांड स्विच प्रदान करना है?

+0

'-fms-extension' शायद। – arrowd

+0

उपयोगकर्ता पुस्तिका (http://clang.llvm.org/docs/UsersManual.html) के अनुसार डिफ़ॉल्ट रूप से ध्वज सक्षम है। मैंने सेटिंग -fmsc-version = 1700 (वह VS2012 है) और यहां तक ​​कि -ddelayed-template-parsing (जो भी डिफ़ॉल्ट होना चाहिए) को सेट करने का प्रयास किया। कोई परिणाम नही। Stdafx.h को हटाने से संकलन त्रुटियों पर कोई प्रभाव नहीं पड़ता है। –

+0

मैंने -सिस्टम के साथ मिंगव हेडर का उपयोग करने का भी प्रयास किया, लेकिन यह एक कॉन्फ़िगर ड्रीममेयर की तरह दिखता है। शामिल करने के क्रम में मुझे अलग-अलग त्रुटियां मिलती हैं और संकलन त्रुटियों के बिना ऑर्डर सेट करने में सक्षम नहीं होती हैं। –

उत्तर

2

विजुअल स्टूडियो द्वारा निर्मित जब क्लैंग ठीक से काम नहीं करता है (माना जाता है कि यह मिनीजीडब्लू द्वारा निर्मित किए जाने पर काम करता है, लेकिन मैं इसे स्वयं सत्यापित करने में सक्षम नहीं हूं)।

जब क्लैंग बनाया गया है, तो इसे बनाने के लिए उपयोग की जाने वाली लाइब्रेरी का उपयोग करने के लिए कॉन्फ़िगर किया गया है। चूंकि आपने विजुअल स्टूडियो का उपयोग करके क्लैंग बनाया है, क्लैंग विजुअल स्टूडियो हेडर और पुस्तकालयों का उपयोग करने का प्रयास करेगा। दुर्भाग्यवश, क्लैंग और विजुअल स्टूडियो के आंतरिक भाग काफी अलग हैं कि क्लेंग वीएस-विशिष्ट हेडर का उपयोग नहीं कर सकता है।

libc++ तक विंडोज के लिए संकलित किया जा सकता है, क्लैंग इच्छा (लगभग निश्चित रूप से) विजुअल स्टूडियो द्वारा संकलित किए जाने पर कभी काम नहीं करेगा। MinGW का उपयोग करके इसे बनाने का प्रयास करें (और ब्लॉग पोस्ट करें या आपने इसे कैसे किया है!), और देखें कि यह आपके लिए काम करता है या नहीं।

0

क्लैंग डिफ़ॉल्ट इसे टूलचेन के निर्माण के लिए उपयोग किया जाता है। लेकिन जैसा कि एमएस के मामले में, एक्सटेंशन शायद विक्रेता-विशिष्ट का उपयोग किया जाता है। क्लैंग की अपनी libC++ उपलब्धता से इस मुद्दे को काफी कम करने की उम्मीद है। मैन्युअल रूप से सही डीआईआर शामिल करें निर्दिष्ट करें।

निर्माण के दौरान अलग संकलन और लिंक चरण भी अलग करें। यह वीएस डिफ़ॉल्ट की तुलना में सही द्विआधारी libs के साथ जोड़ने का कारण बन जाएगा।