Câu trả lời:
Ngoài ra, đối với hậu thế - Clang (như GCC) chấp nhận -x
chuyể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 clang
và clang++
tốt: Sự khác biệt giữa clang và clang ++
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.
-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.
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 .cpp
các file, .ll
các file (llvm ir) và .o
, .a
, .so
và 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.
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 test
và 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 -Wall
tù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.
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>
và clang++ -v <filename.cpp>
trong "#include <...> tìm kiếm bắt đầu tại đây:".
#include <iostream>
. cờ -lstdc ++ đã giải quyết vấn đề này.