ฉันติดตั้งClangโดยใช้ apt-get ใน Ubuntu และฉันสามารถรวบรวมไฟล์ C ได้สำเร็จโดยใช้มัน อย่างไรก็ตามฉันไม่รู้ว่าจะรวบรวม C ++ ผ่านมันได้อย่างไร ฉันต้องทำอะไรเพื่อรวบรวม C ++
ฉันติดตั้งClangโดยใช้ apt-get ใน Ubuntu และฉันสามารถรวบรวมไฟล์ C ได้สำเร็จโดยใช้มัน อย่างไรก็ตามฉันไม่รู้ว่าจะรวบรวม C ++ ผ่านมันได้อย่างไร ฉันต้องทำอะไรเพื่อรวบรวม C ++
คำตอบ:
คำสั่งclangนี้ใช้สำหรับ C และคำสั่งclang++สำหรับ C ++
ฉันไม่ทราบว่าเหตุใดจึงไม่มีคำตอบในการแก้ไขปัญหาโดยตรง เมื่อคุณต้องการที่จะรวบรวมโปรแกรม C ++ clang++ที่ดีที่สุดคือการใช้งาน ตัวอย่างเช่นสิ่งต่อไปนี้ใช้ได้กับฉัน:
clang++ -Wall -std=c++11 test.cc -o test
หากคอมไพล์ถูกต้องมันจะสร้างไฟล์ปฏิบัติการtestและคุณสามารถเรียกใช้ไฟล์โดยใช้./test.
หรือคุณสามารถใช้clang++ test.ccเพื่อคอมไพล์โปรแกรม a.outมันจะผลิตแฟ้มที่ปฏิบัติการเริ่มต้นชื่อ ใช้./a.outเพื่อเรียกใช้ไฟล์
กระบวนการทั้งหมดเหมือนกับ g ++ ถ้าคุณคุ้นเคยกับ g ++ ดูโพสต์นี้เพื่อตรวจสอบว่ามีคำเตือนใดบ้าง-Wallบ้างที่ตัวเลือก หน้านี้แสดงรายการของแฟล็กการวินิจฉัยที่สนับสนุนโดย Clang
หมายเหตุเกี่ยวกับการใช้clang -x c++ : Kim Gräsmanกล่าวว่าคุณสามารถใช้
clang -x c++เพื่อรวบรวมโปรแกรม cpp ได้ แต่อาจไม่เป็นความจริง ตัวอย่างเช่นฉันมีโปรแกรมง่ายๆด้านล่าง:
#include <iostream>
#include <vector>
int main() {
/* std::vector<int> v = {1, 2, 3, 4, 5}; */
std::vector<int> v(10, 5);
int sum = 0;
for (int i = 0; i < v.size(); i++){
sum += v[i]*2;
}
std::cout << "sum is " << sum << std::endl;
return 0;
}
clang++ test.cc -o testจะคอมไพล์สำเร็จ แต่clang -x c++จะไม่แสดงข้อผิดพลาดในการอ้างอิงที่ไม่ได้กำหนดจำนวนมาก ดังนั้นฉันเดาว่ามันไม่เทียบเท่ากันแน่ ๆ ที่ดีที่สุดคือใช้clang++แทนclang -x c++เมื่อคอมไพล์โปรแกรม c ++ เพื่อหลีกเลี่ยงปัญหาเพิ่มเติม
นอกจากนี้สำหรับลูกหลาน - เสียงดัง (เช่น GCC) ยอมรับ-xสวิตช์เพื่อตั้งค่าภาษาของไฟล์อินพุตตัวอย่างเช่น
$ clang -x c++ some_random_file.txt
เธรดรายชื่ออีเมลนี้อธิบายความแตกต่างระหว่างclangและclang++ดี: ความแตกต่างระหว่างเสียงดังและเสียงดัง ++
#include <iostream>. แฟล็ก -lstdc ++แก้ปัญหานี้ได้
clang.exeแล้วจึงคัดลอกสิ่งที่เรียกใช้งานได้ไปclang++.exeยัง ดังนั้นมันจึงเป็นไฟล์ปฏิบัติการเดียวกันในขณะรันไทม์มันจะตรวจสอบชื่อของตัวเองเพื่อแยกแยะว่าจะทำงานเป็นคอมไพเลอร์ C หรือ C ++ HTH.
-x c++มีประโยชน์มากที่จะให้เป็น-extra-argไปเสียงดังกราว-เป็นระเบียบเรียบร้อยเพื่อบังคับให้รักษาไฟล์ .h ว่ามี C ++ แทนซี
clang++และปล่อยให้มันตรวจจับประเภทของไฟล์ที่คุณให้มา เมื่อโครงการสามารถมี.cppไฟล์.llไฟล์ (LLVM IR) และ.o, .a, .soและสิ่งที่ไม่ไฟล์จากห้องสมุดของบุคคลที่สามclang -x c++ก็จะโยนขึ้น
clang++งานได้ แต่clang -x c++แสดงข้อผิดพลาดในการอ้างอิงที่ไม่ได้กำหนดจำนวนมาก (แฟล็กอื่นเหมือนกัน) clang++ดังนั้นผมคิดว่าดีที่สุดคือการใช้งาน ทดสอบเสียงดังเวอร์ชัน: 11.0.0
ฉันมีปัญหาคล้ายกันเมื่อสร้าง Clang จากซอร์ส (แต่ไม่ใช่ด้วยsudo apt-get installซึ่งอาจขึ้นอยู่กับเวอร์ชันของ Ubuntu ที่คุณใช้งานอยู่)
คุณควรตรวจสอบว่าclang++สามารถค้นหาตำแหน่งที่ถูกต้องของไลบรารี C ++ ของคุณได้หรือไม่:
เปรียบเทียบผลลัพธ์ของg++ -v <filename.cpp>และclang++ -v <filename.cpp>ภายใต้ "#include <... > การค้นหาเริ่มต้นที่นี่:"
โซลูชันที่ 1:
clang++ your.cpp
โซลูชันที่ 2:
clang your.cpp -lstdc++
โซลูชันที่ 3:
clang -x c++ your.cpp
เปิดหน้าต่าง Terminal และไปที่ไดเรกทอรีโครงการของคุณ รันชุดคำสั่งเหล่านี้ขึ้นอยู่กับคอมไพเลอร์ที่คุณติดตั้ง:
ในการคอมไพล์ไฟล์ C ++ หลายไฟล์โดยใช้ clang ++:
$ clang++ *.cpp
$ ./a.out
ในการรวบรวมไฟล์ C ++ หลายไฟล์โดยใช้ g ++:
$ g++ -c *.cpp
$ g++ -o temp.exe *.o
$ ./temp.exe