2013-11-18 14 views
20

मैं था किया गया ग़लती से इस आदेश है, जो लिंक कदम पर विफल रही है का उपयोग करते हुए:क्या अंतर है? क्लैंग ++ | बजना -std = C++ 11

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

किसी को भी व्याख्या कर सकते हैं क्यों बजना एक सी ++ भाषा विकल्प प्रदान करता है, और क्यों यह विफल रहता है जोड़ना? विकल्प क्यों नहीं -x c++ या -std=c++11clang++ जैसी ही चीज़ों को पूरा करते हैं? धन्यवाद!

+5

डाउनवॉट्स के साथ क्या चल रहा है? हां, मैं समझता हूं कि क्लैंग ++ सी ++ के लिए क्लैंग को कॉन्फ़िगर करने के लिए सिर्फ एक लिंक है। यह मेरा सवाल नहीं है, कृपया फिर से देखें। यदि यह * इतना * सरल है तो कृपया डाउनवोट के बजाय उत्तर दें। – djwbrown

+3

यह प्रश्न अपने चौथे संशोधन में एक पूरी तरह से वैध सवाल है कि मुझे बंद करने या डाउनवोट करने के लिए मतदान करने का कोई कारण नहीं दिखता है। यह एक "क्यों ...?" प्रश्न है, लेकिन इसका दायरा इतना छोटा है कि उम्मीद है कि आम तौर पर सहमत एक तर्क के रूप में एक तर्क के रूप में पेश किया जाएगा। –

+0

प्रश्न में 'std = C++ 11 stdlib = libC++ 'होना चाहिए' -std = C++ 11 -stdlib = libC++'? –

उत्तर

22

तकनीकी तौर पर, clang या clang++ नामित कार्यक्रमों में से न तो एक संकलक है: वे दोनों ड्राइवरों कि इनपुट तर्क का विश्लेषण और क्या compilers/अस्सेम्ब्लेर्स/linkers क्या क्या कमांड लाइन तर्क के साथ फाइल पर आह्वान करने के लिए निर्धारित कर रहे हैं। दोनों के बीच एकमात्र अंतर यह है कि clang केवल सी मानक लाइब्रेरी के खिलाफ लिंक करता है यदि यह एक लिंक करता है, जबकि clang++ दोनों C++ और C मानक पुस्तकालयों के विरुद्ध लिंक।

-x=<language> विकल्प स्रोत फ़ाइल भाषा निर्धारित करने के लिए ड्राइवर प्रोग्राम की हेरिस्टिक को ओवरराइड करता है, यह ड्राइवर को <language> पर संकलक को आमंत्रित करने के लिए निर्देशित करता है।

-std=<dialect> विकल्प चुनता है कि आप किस विशेष भाषा का उपयोग करना चाहते हैं। यदि आपको यह सुनिश्चित करने की आवश्यकता है कि आपका सी ++ प्रोग्राम पुराना सी ++ 98 कंपाइलर पोर्टेबल है, तो आप इसे -std=c++98 से संकलित कर सकते हैं। -std केवल लक्ष्य भाषा पर लागू होता है: यह संकलित करने का प्रयास नहीं करेगा। असेंबलर या जावा सी ++ 98 के रूप में, केवल स्रोत फाइलें जो चालक सी ++ मानती हैं।

संक्षेप में, दो अलग-अलग ड्राइवर प्रोग्राम हैं जो चुनने में आसान हैं कि कौन से पुस्तकालयों के खिलाफ लिंक करना है। सी ++ संकलन के लिए उचित उपयोग के मामले हैं लेकिन सी ++ मानक पुस्तकालय के खिलाफ लिंक नहीं कर रहे हैं।

2

क्लैंग पूरे कंपाइलर का नाम है।

हालांकि, देखने के एक आदेश-पंक्ति बिंदु से:

  • बजना सी संकलक
  • बजना ++ है C++ कम्पाइलर (छ तरह ++ है एक सी ++ संकलक, जबकि जीसीसी एक सी संकलक है)

-std = C++ 11 विकल्प नए सी ++ 11 मानक (जैसा कि g ++ में) सक्षम करता है।

+2

लेकिन, सी संकलक के साथ सी ++ विकल्प ध्वज क्यों प्रदान करें? यह मेरा मुख्य सवाल है। – djwbrown

+4

'gcc' चीजों के साथ संगत रहने के लिए चीजें करता है। – mah

+1

@djwbrown: 'clang' की संभावना तब होगी जब यह C++ कोड पर चलती है और सफलतापूर्वक ऑब्जेक्ट फ़ाइल उत्पन्न करती है।'क्लैंग' और' क्लैंग ++ 'के बीच का अंतर तब दिखाई देता है जब यह आपकी ऑब्जेक्ट फ़ाइलों को लिंक करने का प्रयास करता है जहां सी ++ को सी' क्लैंग 'से अलग सेट की आवश्यकता होती है, सी को जोड़ने का प्रयास करेगा, और' क्लैंग ++ 'सी ++ कोड। –

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