Làm cách nào để biên dịch C ++ với Clang?


97

Tôi đã cài đặt Clang bằng cách sử dụng apt-get trong Ubuntu và tôi có thể biên dịch thành công tệp C bằng cách sử dụng nó. Tuy nhiên, tôi không biết cách biên dịch C ++ thông qua nó. Tôi cần làm gì để biên dịch C ++?

Câu trả lời:


147

Lệnh clangdành cho C và lệnh clang++dành cho C ++.


48

Ngoài ra, đối với hậu thế - Clang (như GCC) chấp nhận -xchuyển đổi để đặt ngôn ngữ của các tệp đầu vào, ví dụ:

$ clang -x c++ some_random_file.txt

Chuỗi danh sách gửi thư này giải thích sự khác biệt giữa clangclang++tốt: Sự khác biệt giữa clang và clang ++


4
Tôi đã gặp lỗi trình liên kết với clang -x c ++ khi biên dịch tệp cpp với #include <iostream>. cờ -lstdc ++ đã giải quyết vấn đề này.
Slav

1
Tôi có mã nguồn của Clang trước mắt tôi. Trong quá trình xây dựng (trên Windows), đầu tiên nó xây dựng clang.exe, sau đó sao chép tệp thực thi vào clang++.exe. Vì vậy, nó là cùng một tệp thực thi, chỉ trong thời gian chạy, nó kiểm tra tên của chính nó để phân biệt liệu hoạt động như trình biên dịch C hay C ++. HTH.
Serge Rogatch

Là một lưu ý, tùy chọn -x c++là rất hữu ích để cung cấp cho như một -extra-argđể kêu vang-gọn gàng , để buộc nó để điều trị một file .h như chứa C ++ thay vì C.
rao N

Điều này là quá hạn chế để thực sự hữu ích trừ khi bạn xây dựng toàn bộ từ nguồn. Tốt hơn là chỉ sử dụng clang++và để nó phát hiện loại tệp bạn cung cấp cho nó. Khi một dự án có thể chứa .cppcác file, .llcác file (llvm ir) và .o, .a, .sovà những gì không tập tin từ thư viện của bên thứ ba, clang -x c++sẽ chỉ ném lên.
Sahsahae

47

Tôi không biết tại sao không có câu trả lời trực tiếp giải quyết vấn đề. Khi bạn muốn biên dịch chương trình C ++, cách tốt nhất là sử dụng clang++. Ví dụ, những điều sau đây phù hợp với tôi:

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

Nếu được biên dịch chính xác, nó sẽ tạo ra tệp thực thi testvà bạn có thể chạy tệp bằng cách sử dụng ./test.

Hoặc bạn chỉ có thể sử dụng clang++ test.ccđể biên dịch chương trình. Nó sẽ tạo ra một tệp thực thi mặc định có tên a.out. Sử dụng ./a.outđể chạy tệp.

Toàn bộ quá trình này rất giống g ++ nếu bạn đã quen với g ++. Xem bài đăng này để kiểm tra những cảnh báo nào được bao gồm trong -Walltùy chọn. Trang này hiển thị danh sách các cờ chẩn đoán được hỗ trợ bởi Clang.


4
Cảm ơn vì đã thực sự trả lời câu hỏi.
Curyous

4

Tôi đã gặp sự cố tương tự khi xây dựng Clang từ nguồn (nhưng không phải với sudo apt-get install. Điều này có thể phụ thuộc vào phiên bản Ubuntu mà bạn đang chạy).

Có thể đáng để kiểm tra nếu clang++có thể tìm thấy vị trí chính xác của các thư viện C ++ của bạn:

So sánh kết quả của g++ -v <filename.cpp>clang++ -v <filename.cpp>trong "#include <...> tìm kiếm bắt đầu tại đây:".


0

giải pháp 1:

  clang++ your.cpp

giải pháp 2:

  clang your.cpp -lstdc++

giải pháp 3:

   clang -x c++ your.cpp 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.