Bagaimana cara mengkompilasi C ++ dengan Clang?


97

Saya telah menginstal Clang dengan menggunakan apt-get di Ubuntu, dan saya berhasil mengkompilasi file C menggunakannya. Namun, saya tidak tahu bagaimana mengkompilasi C ++ melaluinya. Apa yang harus saya lakukan untuk mengompilasi C ++?

Jawaban:


148

Perintah clanguntuk C, dan perintah clang++untuk C ++.


49

Saya tidak tahu mengapa tidak ada jawaban yang langsung menangani masalah tersebut. Saat Anda ingin mengkompilasi program C ++, yang terbaik adalah menggunakan clang++. Misalnya, berikut ini berfungsi untuk saya:

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

Jika dikompilasi dengan benar, itu akan menghasilkan file yang dapat dieksekusi test, dan Anda dapat menjalankan file dengan menggunakan ./test.

Atau Anda bisa menggunakan clang++ test.ccuntuk mengkompilasi program. Ini akan menghasilkan file executable default bernama a.out. Gunakan ./a.outuntuk menjalankan file.

Seluruh prosesnya mirip dengan g ++ jika Anda sudah terbiasa dengan g ++. Lihat posting ini untuk memeriksa peringatan mana yang disertakan dengan -Wallopsi. Halaman ini menunjukkan daftar tanda diagnostik yang didukung oleh Clang.


4
Terima kasih telah menjawab pertanyaannya.
Curyous

48

Selain itu, untuk anak cucu - Clang (seperti GCC) menerima -xsakelar untuk mengatur bahasa file input, misalnya,

$ clang -x c++ some_random_file.txt

Utas milis ini menjelaskan perbedaan antara clangdan clang++well: Perbedaan antara clang dan clang ++


4
Saya mengalami kesalahan linker dengan clang -x c ++ saat mengompilasi file cpp dengan #include <iostream>. -lstdc ++ flag memecahkan masalah ini.
Slav

1
Saya memiliki kode sumber Clang di depan mata saya sekarang. Selama build (di Windows), build pertama clang.exe, lalu salin file yang dapat dieksekusi ke clang++.exe. Jadi itu dapat dieksekusi yang sama, hanya pada waktu proses ia memeriksa namanya sendiri untuk membedakan apakah berperilaku sebagai kompiler C atau C ++. HTH.
Serge Rogatch

Sebagai catatan, pilihan -x c++sangat berguna untuk memberikan sebagai -extra-argke dentang-rapi , untuk memaksa untuk mengobati H file sebagai mengandung C ++ bukan C.
Iklan N

Ini terlalu membatasi untuk benar-benar berguna kecuali Anda membangun semuanya dari sumber. Lebih baik hanya menggunakan clang++dan membiarkannya mendeteksi jenis file apa yang Anda berikan padanya. Ketika sebuah proyek dapat berisi .cppfile, .llfile (llvm ir) dan .o, .a, .sodan apa yang tidak file dari perpustakaan pihak ketiga, clang -x c++hanya akan muntah.
Sahsahae

4

Saya mengalami masalah serupa saat membuat Clang dari sumber (tetapi tidak dengan sudo apt-get install. Ini mungkin tergantung pada versi Ubuntu yang Anda jalankan).

Mungkin perlu diperiksa apakah clang++dapat menemukan lokasi yang benar dari pustaka C ++ Anda:

Bandingkan hasil g++ -v <filename.cpp>dan clang++ -v <filename.cpp>, di bawah "#include <...> pencarian dimulai di sini:".


0

solusi 1:

  clang++ your.cpp

solusi 2:

  clang your.cpp -lstdc++

solusi 3:

   clang -x c++ your.cpp 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.