2014-06-22 12 views
11

आदेश "बजना -v" प्रिंट:क्यों क्लैंग एक जीसीसी स्थापना का चयन करता है?

$ clang -v 
clang version 3.4 (tags/RELEASE_34/final) 
Target: i386-redhat-linux-gnu 
Thread model: posix 
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2 
Found candidate GCC installation: /usr/lib/gcc/i686-redhat-linux/4.8.2 
Selected GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2 

इसका क्या मतलब "बजना एक जीसीसी installatiom का चयन करता है" कि करता है? क्यूं कर? क्लैंग जीसीसी से स्वतंत्र है या नहीं?
आपकी मदद के लिए धन्यवाद।

संपादित करें:
मैं एक शायद सामान्य जवाब (मैं फेडोरा 20 का उपयोग करें) पेज पर पाया
https://bbs.archlinux.org/viewtopic.php?id=129760

+6

क्लैंग libgcc और crt ऑब्जेक्ट फ़ाइलों पर निर्भर करता है।वे निश्चित रूप से स्वतंत्र रूप से बनाया और स्थापित किया जा सकता है, लेकिन ऐसा करने का कोई कैननिक तरीका नहीं है। –

उत्तर

3

बजना मेजबान संकलक से कई सेटिंग्स का उपयोग करता है, तो इस होस्ट के लिए वहाँ अन्य डिफ़ॉल्ट संकलक है (बजना डिफ़ॉल्ट है ऐप्पल के ओएसएक्स/मैकोज़ पर और variants of FreeBSD पर)। ओएस के अन्य द्विआधारी और पुस्तकालयों के साथ अधिक संगतता प्राप्त करना उपयोगी होता है।

यह अक्सर मेजबान binutils (लिंकर और असेंबलर के लिए), सीआरटी फाइलों के लिए मेजबान कंपाइलर और आंतरिक संकलक शीर्षलेख और सी ++ पुस्तकालयों में एबीआई संगतता के लिए सी ++ लाइब्रेरी का उपयोग करता है।

टूलचेन चयन क्लैंग ड्राइवर (clang कमांड) का हिस्सा है, https://github.com/llvm-mirror/clang/blob/master/lib/Driver/ToolChains.cpp फ़ाइल में लागू किया गया है।

बजना के "ड्राइवर डिजाइन & Internals" में कुछ प्रलेखन http://clang.llvm.org/docs/DriverInternals.html

toolchains

जीसीसी चालक उपकरण चेन का कोई प्रत्यक्ष समझ है नहीं है। प्रत्येक जीसीसी बाइनरी लगभग एक ही टूलशैन के अंदर एम्बेडेड जानकारी से मेल खाती है।

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

बाइंड: टूल & फ़ाइल नाम चयन। संकल्पनात्मक रूप से, चालक उपकरण को क्रियाएं असाइन करने के लिए शीर्ष नीचे मिलान करता है। टूलचैन एक विशेष कार्रवाई करने के लिए टूल का चयन करने के लिए ज़िम्मेदार है; एक बार जब ड्राइवर चयनित उपकरण के साथ इंटरैक्ट करता है यह देखने के लिए कि क्या यह अतिरिक्त क्रियाओं से मेल खा सकता है (उदाहरण के लिए, एक एकीकृत प्रीप्रोसेसर होने के द्वारा)।

चालक टूल बाइंडिंग करने के लिए टूलचैन के साथ इंटरैक्ट करता है। प्रत्येक टूलChain में किसी विशेष आर्किटेक्चर, प्लेटफॉर्म और ऑपरेटिंग सिस्टम के संकलन के लिए आवश्यक सभी टूल्स के बारे में जानकारी होती है। अलग-अलग आर्किटेक्चर के लिए टूल के साथ बातचीत करने के लिए एक संकलक के दौरान एक एकल चालक आमंत्रण एकाधिक टूलChains से पूछताछ कर सकता है।

इस चरण के परिणाम सीधे गणना नहीं किए जाते हैं, लेकिन ड्राइवर -ccc-print-bindings विकल्प के माध्यम से परिणाम प्रिंट कर सकता है। उदाहरण के लिए:

$ clang -ccc-print-bindings -arch i386 -arch ppc t0.c 
# "i386-apple-darwin9" - "clang", inputs: ["t0.c"], output: "/tmp/cc-Sn4RKF.s" 
# "i386-apple-darwin9" - "darwin::Assemble", inputs: ["/tmp/cc-Sn4RKF.s"], output: "/tmp/cc-gvSnbS.o" 
# "i386-apple-darwin9" - "darwin::Link", inputs: ["/tmp/cc-gvSnbS.o"], output: "/tmp/cc-jgHQxi.out" 
# "ppc-apple-darwin9" - "gcc::Compile", inputs: ["t0.c"], output: "/tmp/cc-Q0bTox.s" 
# "ppc-apple-darwin9" - "gcc::Assemble", inputs: ["/tmp/cc-Q0bTox.s"], output: "/tmp/cc-WCdicw.o" 
# "ppc-apple-darwin9" - "gcc::Link", inputs: ["/tmp/cc-WCdicw.o"], output: "/tmp/cc-HHBEBh.out" 
# "i386-apple-darwin9" - "darwin::Lipo", inputs: ["/tmp/cc-jgHQxi.out", "/tmp/cc-HHBEBh.out"], output: "a.out" 

यह टूल संकलन, उपकरण, इनपुट और आउटपुट दिखाता है जो इस संकलन अनुक्रम के लिए बाध्य हैं। यहां क्लैंग का उपयोग i386 आर्किटेक्चर पर t0.c को संकलित करने के लिए किया जा रहा है और परिणाम के डार्विन विशिष्ट संस्करणों का उपयोग परिणामों को इकट्ठा करने और लिंक करने के लिए किया जा रहा है, लेकिन उपकरण के जेनेरिक जीसीसी संस्करणों का उपयोग PowerPC पर किया जा रहा है।

संबंधित मुद्दे