2012-01-16 11 views
23

पर क्लैंग सबसे पहले, मैंने "Getting Started: Building and Running Clang" का पालन किया है। विशेष रूप से, मैंने इसे "विजुअल स्टूडियो का उपयोग" अनुभाग के अनुसार बनाया है। दूसरे शब्दों में, मैं गया है यह दृश्य स्टूडियो 2010विंडोज

दूसरे का उपयोग करके बनाया गया है, मैं मैन्युअल रूप से सेट MinGW वितरण के लिए पुस्तकालय पथ शामिल और:

enter image description here

साधारण प्रोग्राम मैं कोशिश कर रहा हूँ संकलन:

#include <iostream> 
using namespace std; 

int main() { 
    cout << "Hello, World!" << endl; 
    return 0; 
} 

मैं संकलक से निम्नलिखित प्रतिक्रिया प्राप्त:

In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41: 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace 
    using ::fgetws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace 
    using ::fputws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace 
    using ::getwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace 
    using ::getwchar; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace 
    using ::putwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace 
    using ::putwchar; 
     ~~^ 
6 errors generated. 
Build error occurred, build is stopped 
Time consumed: 646 ms. 

स्पष्ट सवाल यह है कि - मुझे यह क्यों मिलता है?

साथ ही, मैं और अधिक विवरण जानना चाहते हैं, और के बाद से, बजना वेबसाइट अत्यंत संक्षिप्त जानकारी प्रदान करता है - मैंने सोचा था कि किसी ने मुझसे के लिए निम्नलिखित प्रश्न स्पष्ट कर सकते:

  1. जहां तक ​​मैं समझता हूँ बजना नहीं है अपनी मानक पुस्तकालय है (stdC++ मुझे लगता है, है ना?)। यही कारण है कि मुझे मिनजीडब्ल्यू के हेडर और पुस्तकालयों का उपयोग करना है - क्या मैं सही हूँ?
  2. विजुअल स्टूडियो और मिनजीडब्ल्यू के साथ क्लैंग बनाने के बीच क्या अंतर है?
  3. क्या मुझे हार्ड कोड को clang/lib/Frontend/InitHeaderSearch.cpp में पथ शामिल करना है या मैं इसे छोड़ सकता हूं और बाद में उन स्क्रीन को "-I" विकल्प के माध्यम से निर्दिष्ट कर सकता हूं जैसा कि मैंने उपरोक्त स्क्रीनशॉट में किया है?
+2

जो संयोजन मैंने अतीत में काम करने के लिए प्राप्त किया है वह है IITHeaderSearch.cpp को संशोधित करना है ताकि मेरे मिनजीडब्लू के पथ को शामिल किया जा सके और फिर मिनगब्लू टूलचेन के साथ निर्माण किया जा सके।मैं विजुअल सी ++ टूलचैन का उपयोग करके भी निर्माण करने में सक्षम हूं, लेकिन मैं यह समझने में सक्षम नहीं था कि निर्मित कंपाइलर को मिनीगू इंस्टॉल से हेडर और पुस्तकालयों का उपयोग करने के लिए कैसे प्राप्त किया जा सकता है (दृश्य सी ++ सी ++ मानक लाइब्रेरी हेडर नहीं कर सकते इस्तेमाल किया जा सकता है क्योंकि वे विजुअल सी ++ - विशिष्ट विशेषताओं पर बड़े पैमाने पर भरोसा करते हैं)। –

+3

हाँ यह वही है जो मैं सोच रहा था। लेकिन मेरे लिए सबसे बड़ा भ्रम यह है कि कैसे दृश्य सी ++ या मिनजीडब्ल्यू के साथ निर्माण क्लैंग कंपाइलर के उपयोग के दौरान उपयोग किए जाने वाले पुस्तकालय पथ से संबंधित है। दूसरे शब्दों में, मुझे क्लैंग संकलित करने के बाद इन पथों को स्वतंत्र रूप से चुनने में सक्षम होना है। धरती पर क्यों ये पथ संकलक पर निर्भर करते हैं जिसे मैंने क्लैंग बनाने के लिए उपयोग किया था? –

+1

@JamesMcNellis: क्लैंग वर्तमान में वीसी ++ हेडर को पार्स करने में सक्षम होना चाहिए। एकमात्र समस्याग्रस्त पार्सिंग क्षेत्र एमएफसी आईआईआरसी है। – rubenvb

उत्तर

32

यदि आप एमएसवीएस के साथ क्लैंग का निर्माण करते हैं, तो यह स्वचालित रूप से डिफ़ॉल्ट वीएस पथों को शामिल करेगा, और उन शीर्षकों में खींच देगा। यही कारण है कि libstdC++ शीर्षलेख त्रुटियों का उत्पादन कर रहे हैं: वे वी कार्यों को आयात कर रहे हैं जो वीएस हेडर में मौजूद नहीं हैं। वीएस के साथ सी ++ के लिए क्लैंग का उपयोग करना अब नहीं है: क्लैंग में एबीआई (नाम मैंगलिंग और अन्य) कार्यक्षमता खोने के कारण आपको लिंक असफलताएं मिलेंगी। यदि आप अभी भी एमएसवीएस क्लैंग का उपयोग करना चाहते हैं, तो इसे मिनजीडब्ल्यू हेडर पर इंगित न करें। यह वीएस हेडर (सी ++ समेत) को पार्स करेगा, यह सिर्फ लिंक करने में विफल रहेगा।


संपादित: मैं बजना के साथ जीसीसी (केवल 32-बिट) के एक DW2 संस्करण का निर्माण किया है। अपवाद इस बिल्ड में काम करते हैं, और इसलिए आप विंडोज पर क्लैंग के साथ वास्तविक सी ++ सामान बना सकते हैं। Get version 3.2 here

+0

और यदि मैं मैन्युअल रूप से इसे स्वयं को MinGW के साथ बना देता हूं और स्क्रीनशॉट में मैन्युअल रूप से पथ जोड़ता हूं तो क्या होगा? –

+1

क्लैंग के किसी भी पूर्वनिर्धारित बाइनरी पैकेज? –

+0

@ श्री अनीबिस: हाँ, मेरे पास निर्मित जीसीसी के प्रत्येक संस्करण के लिए विंडोज़ क्लेंग का निर्माण है। आप बस इसे अकेले उपयोग नहीं कर सकते हैं। – rubenvb

1

स्पष्ट जवाब आप -fno-एमएस-संगतता भेजने बजना को ++ भूल गया है: पी

  1. आप ठीक कह रहे हैं।
  2. वीसी ++ जीयूआई टूल-चेन है, मिनजीडब्ल्यू चरित्र कंसोल है।
  3. चूंकि क्लैंग सार्वजनिक उपभोग के लिए काफी परिपक्व नहीं है लेकिन फिर भी स्थिर हो गया है, इसलिए इसकी देव टीम कोड पर काम करेगी अन्यथा आप उस काम को जोखिम देते हैं जो खोया द्वीप बन सकता है। मैं इसका उपयोग कर रहा हूं- जैसा कि आपका उदाहरण सुझाता है।

मैं वीएस का उपयोग कर विंडोज ऐप देव कर रहा हूं और प्लेटफॉर्म के डोमेन के तटस्थ पहलुओं को साझा करने के लिए क्लैंग + कोडब्लॉक का उपयोग कर रहा हूं।

+1

वीसी ++ <-> मिनजीडब्ल्यू। वीसी ++ जीयूआई नहीं है। इसमें कमांडलाइन इंटरफ़ेस है। – rubenvb

+0

"जीयूआई उपकरण-श्रृंखला" जीयूआई नहीं है। जीयूआई के साथ इसकी टूल-चेन डिफ़ॉल्ट स्थापना के भीतर शामिल है। –