clang và clang ++ không tìm thấy sau khi cài đặt gói clang-3.5


26

Sau khi cài đặt clang-3.5gói, gõ clanghoặc clang++trên dòng lệnh sẽ cho tôi một thông báo cho biết các gói chương trình đó có thể được tìm thấy. Cố gắng chạy cài đặt clang-3.5lại, trạng thái apt đã được cài đặt và ở phiên bản mới nhất.

Cài đặt ban đầu được thực hiện với lệnh:

sudo apt-get install clang-3.5 llvm

build-essential đã được cài đặt trước đó.

Bất kỳ ý tưởng về những gì có thể đã xảy ra?

Câu trả lời:


30

Nó ở đó, nhưng nó vẫn được gọi là clang-3.5.

Bạn có thể thực thi nó dưới dạng clang-3.5(hoặc clang++-3.5) hoặc thiết lập một liên kết tượng trưng cho nó như tôi đã làm (cài đặt clang thông thường không hoạt động):

sudo ln -s /usr/bin/clang-3.5 /usr/bin/clang
sudo ln -s /usr/bin/clang++-3.5 /usr/bin/clang++

Xấu xí xung quanh, có lẽ; nhưng ít nhất nó hoạt động ngay bây giờ :)


Đối với clang-6.0, tôi phải làm điều này ngoài ra:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri

12

Cách thích hợp để sử dụng tiếng kêu làm mặc định của bạn ccc++là sử dụng update-alternatives:

Có thể một số chương trình hoàn thành các chức năng tương tự hoặc tương tự được cài đặt trên một hệ thống cùng một lúc. Ví dụ, nhiều hệ thống có một số trình soạn thảo văn bản được cài đặt cùng một lúc. Điều này mang lại sự lựa chọn cho người dùng hệ thống, cho phép mỗi người sử dụng một trình soạn thảo khác nhau, nếu muốn, nhưng làm cho chương trình khó đưa ra lựa chọn tốt về trình soạn thảo nếu người dùng không chỉ định một sở thích cụ thể.

vì vậy trước tiên bạn cần thêm clang-3.5hoặc clang++-3.5thay thế cho ví dụ gccg++:

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-3.5 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-3.5 100

Nếu bất cứ lúc nào bạn cần chuyển về gcchoặc g++bạn có thể sử dụng --configtùy chọn:

sudo update-alternatives --config c++

Bạn có thể thêm một số giải thích thêm về các đối số? Tại sao cc/ c++ở giữa hai con đường? Đó là những gì 100cuối cùng? Sự ưu tiên?
helmesjo

Hãy xem update-alternativestài liệu. Tôi nghĩ rằng họ có một lời giải thích tốt hơn bất cứ điều gì tôi sẽ tóm tắt ở đây.
Yan Foto

5

Trên Ubuntu 15.04, bạn cũng có thể cài đặt gói clang dọc theo gói clang-xx. Sau đó, bạn có thể gõ clang ++ và thực thi theo nên được tìm thấy.

sudo apt-get install clang

Sẽ không "apt-get install clang" chỉ đơn giản là cài đặt phiên bản mới nhất, và sau đó sử dụng nó? Nếu OP đang cài đặt v3.5, anh ta không muốn sử dụng cái mới nhất.
amfcosta

4

Thêm vào câu trả lời của Yan Foto (và chỉ trong trường hợp mục đích của bạn là có thể sử dụng được clangnhưng không nhất thiết phải sử dụng nó như vậy cc), bạn thực sự có thể thêm toàn bộ bộ chương trình trong một lần sử dụng

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 380 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-3.8 \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-3.8 \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-3.8

(Lưu ý rằng bộ nhị phân đi kèm với mỗi phiên bản tiếng kêu có thể khác nhau, ví dụ 3.6 không có clang-tblgen , 3,8 không.)

Nếu bạn lặp lại điều này cho mọi phiên bản tiếng kêu bạn cài đặt, bạn sẽ có thể chuyển đổi giữa chúng chỉ bằng một update-alternativeslệnh duy nhất .

(Trong khi đó, rõ ràng, vẫn còn một cuộc tranh luận đang diễn ra về việc có nên bao gồm các liên kết này với các gói Ubuntu hay không: https://bugs.launchpad.net/ubfox/+source/llvm-3.1/+bug/991493 )


0

Tạo một tập tin .bashrc trong thư mục chính của bạn. Nhập dòng mã này.

bí danh clang ++ = "clang ++ - 3.5"

Đóng thiết bị đầu cuối của bạn. Mở nó lên một lần nữa. Sau đó cố gắng biên dịch lại chương trình của bạn.

Từ những gì tôi có thể nói clang sẽ không hoạt động trừ khi bạn nêu phiên bản trong tên lệnh "clang ++ - 3.5". Vì vậy, tôi chỉ đặt bí danh tên trong tệp .bashrc của mình. Vì vậy, tôi chỉ phải gõ "clang ++".

Nhân tiện, tôi đã tải xuống clang 3.5, vì vậy hãy điều chỉnh lời khuyên trước đó cho phiên bản của bạn.


0

Nếu bạn đã cài đặt clang chính xác, một cách rất dễ dàng khác giúp bạn tránh được việc nhập số phiên bản cùng với tên của chương trình là sử dụng tính năng tự động hoàn tất, ví dụ (đã cài đặt clang ++ - 3.5):

clang+[TAB][ENTER]

Vì vậy, bạn chỉ phải gõ clang+, nhấn TabEnter. Hoạt động tương tự với tên của thư mục, tên tệp, v.v. (Tuy nhiên, điều này sẽ không giúp bạn nếu bạn có nhiều hơn một phiên bản chương trình được cài đặt.)


0

Điều này sẽ đặt các lựa chọn thay thế cập nhật cho clang- 4.0 nếu clang- 3.8 (như trên Ubuntu 16.04) được cài đặt:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-4.0 100
sudo update-alternatives --install /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-4.0 100
sudo update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-4.0 100
sudo update-alternatives --install /usr/bin/clang-query clang-query /usr/bin/clang-query-4.0 100
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-4.0 100
sudo update-alternatives --install /usr/bin/scan-build scan-build /usr/bin/scan-build-4.0 100
sudo update-alternatives --install /usr/bin/scan-view scan-view /usr/bin/scan-view-4.0 100

0

Thêm vào câu trả lời của Johann Wendin về liên kết tượng trưng. Trong một root-shell, bạn có thể liên kết tất cả các công cụ clang khác nhau cùng một lúc:

ví dụ

find /usr/bin/ -name clang*  | sed -E 's/^(\/usr\/bin\/.*)(\-[0-9]*)$/ln -s -v \1\2 \1/' | xargs -d '\n' -n 1 bash -c

và sau đó lặp lại cho:

llc-*
lld-*
lldb-*
llvm-*

Sau đó, mọi thứ nên được liên kết, không chỉ là một lựa chọn nhỏ. (Có lẽ tôi vẫn quên một cái gì đó).

Điều này sẽ tìm thấy tất cả các tệp theo mẫu trong / usr / bin, xóa mọi số theo dõi (-8 hoặc -9 hoặc thậm chí -10), sau đó tạo liên kết tượng trưng trên mỗi.

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.