मैं Clang के साथ C ++ कैसे संकलित करूं?


97

मैंने स्थापित किया है उबंटू में apt-get का उपयोग करके Clang , और मैं इसका उपयोग करके C फ़ाइलों को सफलतापूर्वक संकलित कर सकता हूं। हालाँकि, मुझे नहीं पता कि इसके माध्यम से C ++ को कैसे संकलित किया जाए। C ++ को संकलित करने के लिए मुझे क्या करने की आवश्यकता है?

जवाबों:


148

कमांड clangC के लिए है, और कमांड clang++C ++ के लिए है।


48

इसके अलावा, पोस्टेरिटी के लिए - क्लैंग (जैसे जीसीसी) -xइनपुट फ़ाइलों की भाषा सेट करने के लिए स्विच को स्वीकार करता है , उदाहरण के लिए,

$ clang -x c++ some_random_file.txt

यह मेलिंग सूची थ्रेड के बीच clangऔर clang++अच्छी तरह से अंतर बताता है : क्लैंग और क्लैंग ++ के बीच का अंतर


4
जब क्लैप फ़ाइल के साथ संकलित किया गया तो मुझे clx -x c ++ के साथ एक लिंकर त्रुटि हुई #include <iostream>-lstdc ++ ध्वज ने इस समस्या को हल किया।
स्लाव

1
अब मेरी आँखों के सामने क्लैंग का स्रोत कोड है। निर्माण के दौरान (विंडोज पर), यह पहले बनाता है clang.exe, और फिर उस निष्पादन योग्य को कॉपी करता है clang++.exe। तो यह एक ही निष्पादन योग्य है, बस रनटाइम के दौरान यह अपने स्वयं के नाम की जांच करता है कि क्या सी या सी ++ संकलक के रूप में व्यवहार करना है या नहीं। HTH।
सर्ज रोजैच

एक नोट के रूप में, विकल्प -x c++एक के रूप में देने के लिए बहुत उपयोगी था -extra-argकरने के लिए बजना-सुथरा , के रूप में सी ++ युक्त सी के बजाय एक ज फ़ाइल के इलाज के लिए यह मजबूर करने के लिए
विज्ञापन एन

यह वास्तव में उपयोगी होने के लिए बहुत सीमित है जब तक कि आप स्रोत से पूरी चीज का निर्माण न करें। इसका उपयोग करना बेहतर है clang++और यह पता लगाने दें कि आप इसे किस प्रकार की फ़ाइलों की आपूर्ति करते हैं। एक परियोजना शामिल कर सकते हैं जब .cppफ़ाइलें, .llफ़ाइलें (LLVM आईआर) और .o, .a, .soतीसरे पक्ष के पुस्तकालयों से और क्या नहीं फ़ाइलें, clang -x c++बस फेंक देते हैं।
साहसाहे

47

मुझे नहीं पता कि समस्या का सीधे जवाब देने का कोई जवाब क्यों नहीं है। जब आप C ++ प्रोग्राम को संकलित करना चाहते हैं, तो इसका उपयोग करना सबसे अच्छा है clang++। उदाहरण के लिए, निम्नलिखित मेरे लिए काम करता है:

clang++ -Wall -std=c++11 test.cc -o test

यदि सही ढंग से संकलित किया गया है, तो यह निष्पादन योग्य फ़ाइल का उत्पादन करेगा test, और आप फ़ाइल का उपयोग करके चला सकते हैं ./test

या आप केवल clang++ test.ccप्रोग्राम को संकलित करने के लिए उपयोग कर सकते हैं । यह एक डिफ़ॉल्ट निष्पादन योग्य फ़ाइल का नाम देगा a.out./a.outफ़ाइल चलाने के लिए उपयोग करें ।

यदि आप g ++ से परिचित हैं तो पूरी प्रक्रिया जी ++ जैसी है। विकल्प के साथ कौन सी चेतावनियाँ शामिल हैं यह जाँचने के लिए इस पोस्ट को देखें -Wallयह पृष्ठ क्लैंग द्वारा समर्थित नैदानिक ​​झंडे की एक सूची दिखाता है।


4
वास्तव में सवाल का जवाब देने के लिए धन्यवाद।
क्रूस

4

क्लैंग को स्रोत से बनाते समय मुझे इसी तरह की समस्या हुई है (लेकिन इसके साथ नहीं sudo apt-get install। यह उबंटू के संस्करण पर निर्भर हो सकता है जिसे आप चला रहे हैं)।

यह जाँचने योग्य हो सकता है कि क्या clang++आपके C ++ पुस्तकालयों के सही स्थान मिल सकते हैं:

"#Include <...> खोज यहां शुरू होती है:" के तहत g++ -v <filename.cpp>और के परिणामों की तुलना करें clang++ -v <filename.cpp>


0

समाधान 1:

  clang++ your.cpp

समाधान 2:

  clang your.cpp -lstdc++

समाधान 3:

   clang -x c++ your.cpp 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.