ฉันติดตั้ง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