Cài đặt clang 5.0 và sử dụng C ++ 17


17

Tôi đã thử 3 ngày để cài đặt clang 5.0 trên máy Ubuntu 16.04. Tôi đã thử các hướng dẫn khác nhau , nhưng dường như không có gì để làm việc. Khi tôi cố gắng đơn giản lấy bản mới nhất từ ​​SVN và xây dựng / cài đặt (như chi tiết ở đây ), cố gắng biên dịch một chương trình đơn giản dẫn đến:

> clang++ basic.cpp
/usr/include/wchar.h:39:11: fatal error: 'stdarg.h' file not found
# include <stdarg.h>

Sau đó tôi đã thử đặt -DGCC_INSTALL_PREFIXcờ cho cmaketrước khi xây dựng, nhưng điều đó dẫn đến lỗi thậm chí còn tốt hơn:

> clang++ basic.cpp
fatal error: 'iostream' file not found
#include <iostream>

Các bước tôi đã làm theo (từ hướng dẫn trên):

> cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ \
-G "Unix Makefiles" path/to/llvm
...
> make
...
> make check-clang
...
> make install-clang
...

Ai đó có thể đối xử với tôi như một thằng ngốc và giải thích từng bước làm thế nào để cài đặt clang 5.0? Hoặc chỉ cho tôi một hướng dẫn mà ngay cả những kẻ ngốc cơ bản như tôi cũng có thể làm theo? Nếu bạn cũng có thể giải thích cách xây dựng và cài đặt libc ++ cho C ++ 17, tôi sẽ biết ơn mãi mãi.

Cập nhật : Có vẻ như tôi không cài đặt clang chính xác, vì đây là đầu ra của một trình biên dịch dài dòng với tiếng kêu:

...
#include <...> search starts here:
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include

và đây là đầu ra cho g ++:

#include <...> search starts here:
 /usr/include/c++/5
 /usr/include/x86_64-linux-gnu/c++/5
 /usr/include/c++/5/backward
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
...

Đầu ra của lệnh này là gì:dpkg -l libstdc++-5-dev | tail -1
Ravexina

Bạn đã build-essentialcài đặt chưa?
Ravexina

@Ravexina:ii libstdc++-5-dev:amd64 5.4.0-6ubuntu1~16.04.4 amd64 GNU Standard C++ Library v3 (development files)
Steve D

@Ravexina: và vâng, build-Essential được cài đặt.
Steve D

Câu trả lời:


33

Cài đặt clang-5 từ repositores llvm.org

Trước tiên, chúng ta nên thêm kho lưu trữ llvm.org vào danh sách nguồn của mình, dòng mà chúng ta nên thêm là:

deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main

Mở nano và thêm dòng trên vào tệp này:

sudo nano /etc/apt/sources.list.d/llvm.list

Thêm khóa kho lưu trữ, nó sẽ giúp aptxác minh các gói đã tải xuống.

 wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -

Sau đó, cập nhật danh sách của bạn:

sudo apt-get update

Sau đó cài đặt clang-5:

sudo apt-get install clang-5.0 lldb-5.0 lld-5.0

Nó nên hoạt động.

Nếu bạn muốn nhận danh sách tất cả các gói có sẵn từ kho lưu trữ mới được thêm này:

grep -i package: /var/lib/apt/lists/apt.llvm* | cut -f3 -d: | sort | uniq

Nó sẽ cung cấp cho bạn một danh sách như:

clang-5.0 
clang-5.0-doc 
clang-5.0-examples 
libclang-common-5.0-dev
...

Sau đó bạn có thể cài đặt bất cứ thứ gì bạn muốn.


Nó có thể giúp vấn đề biên dịch của bạn

Tệp tiêu đề đã được đề cập không tồn tại trong lỗi của bạn: stdarg.hlà một phần của libstdc++-5-devgói.

Tôi đã có gói này trên máy của mình, vì vậy nếu tôi chạy:

aptitude why libstdc++-5-dev

Tôi sẽ nhận:

i   build-essential Depends g++ (>= 4:5.2)                            
i A g++             Depends g++-5 (>= 5.3.1-3~)                       
i A g++-5           Depends libstdc++-5-dev (= 5.4.0-6ubuntu1~16.04.4)

Vì vậy, có vẻ như việc cài đặt build-essentialgói sẽ giải quyết lỗi này của bạn, vì tôi không chắc bạn đã làm gì.


Tôi đã build-essentialcài đặt. Nhưng đầu ra cho tôi aptitude why libstdc++-5-devhoàn toàn giống với đầu ra của bạn, ngoại trừ không có dòng thiết yếu nào.
Steve D

@SteveD Tôi không chắc, nhưng có lẽ vì một phần nội dung của bạn được cài đặt từ kho lưu trữ và phần khác được cài đặt thủ công, có thể có một số không khớp trong phiên bản thư viện, v.v.
Ravexina

Tôi đã cập nhật nội dung câu hỏi với những gì tôi nghĩ là vấn đề, có lẽ bạn biết cách khắc phục?
Steve D

@SteveD đầu ra không hữu ích lắm trong mắt tôi, có thể một số người khác thấy chúng hữu ích hơn. Tại sao bạn không cài đặt nó từ kho? Tôi nghĩ có khả năng cao vấn đề của bạn sẽ biến mất ..
Ravexina

Tôi cần clang 5.0, không có sẵn trong kho.
Steve D
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.