2012-02-05 56 views
66

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 có ý tưởng làm thế nào để biên dịch C++ thông qua nó. Tôi cần làm gì để biên dịch C++?Làm cách nào để biên dịch C++ bằng Clang?

Trả lời

106

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

+0

Không có thiết bị nào không hoạt động. Chúng ta có cần cài đặt nó bổ sung không? – pythonic

+24

Tôi sợ quả cầu pha lê của tôi là khiếm khuyết, vì vậy bạn sẽ thực sự phải cho chúng tôi biết liệu có bất kỳ thông báo lỗi nào không;) –

+4

@ user1018562 Vui lòng xác định "không hoạt động". Đó có phải là 'lệnh không tìm thấy' hoặc lỗi khác không? – adl

3

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 bạn đang chạy).

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

Hãy so sánh các kết quả của g++ -v <filename.cpp>clang++ -v <filename.cpp>, dưới "#include < ...> tìm kiếm bắt đầu ở đây:".

38

Ngoài ra, cho hậu thế - Clang (như GCC) chấp nhận -x chuyển sang thiết lập ngôn ngữ của các tập tin đầu vào, ví dụ,

$ clang -x c++ some_random_file.txt 

chủ đề mailing list này giải thích sự khác biệt giữa clangclang++ tốt : Difference between clang and clang++

+2

Tôi gặp lỗi liên kết với _clang -x C++ _ khi tệp cpp được biên dịch với '#include '. _-lstdC++ _ flag giải quyết vấn đề này. – Vyacheslav

+1

Tôi có mã nguồn của Clang trước mắt tôi bây giờ. Trong quá trình xây dựng (trên Windows), trước tiên nó xây dựng 'clang.exe', và sau đó các bản sao có thể thực thi thành' clang ++. Exe'. Vì vậy, nó là cùng một thực thi, chỉ trong thời gian chạy nó kiểm tra tên riêng của nó để phân biệt xem có hành xử như trình biên dịch C hay C++. HTH. –

+0

Như một lưu ý, tùy chọn '-x C++' rất hữu ích để cung cấp như một '-extra-arg' thành * clang-tidy *, để buộc nó xử lý tệp .h có chứa C++ thay vì C. –

7

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++, tốt nhất là sử dụng clang++. Ví dụ, các công việc sau cho tôi:

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

Nếu biên soạn một cách chính xác, nó sẽ tạo ra các tập tin thực thi test, và bạn có thể chạy các tập tin 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 là a.out. Sử dụng ./a.out để chạy tệp.

Toàn bộ quá trình rất giống với g ++ nếu bạn quen thuộc với g ++. Xem this post để kiểm tra xem cảnh báo nào được bao gồm với tùy chọn -Wall. This page hiển thị danh sách các cờ chẩn đoán được Clang hỗ trợ.

Các vấn đề liên quan