Installing clang 5.0 and using C++17
I have been trying for 3 days to install clang 5.0 on an Ubuntu 16.04 machine. I have tried various guides, but nothing seems to work. When I try to simply grab the latest from SVN and build/install (as detailed here), trying to compile a simple program leads to:
> clang++ basic.cpp
/usr/include/wchar.h:39:11: fatal error: 'stdarg.h' file not found
# include <stdarg.h>
I then tried setting the -DGCC_INSTALL_PREFIX
flag for cmake
before building, but that leads to the even better error:
> clang++ basic.cpp
fatal error: 'iostream' file not found
#include <iostream>
The steps I've been following are (from the above guide):
> cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ \
-G "Unix Makefiles" path/to/llvm
...
> make
...
> make check-clang
...
> make install-clang
...
Could someone treat me like an idiot and explain step-by-step how to install clang 5.0? Or point me to a guide that even basic fools like me can follow? If you also can explain how to build and install libc++ for C++17, I would be eternally grateful.
Update: It seems I'm not installing clang correctly, since this is the the output of a verbose compilation with clang:
...
#include <...> search starts here:
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
and this is the output for 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
...
Solution 1:
Install clang-5 from llvm.org repositores
First, we should add the llvm.org repositories to our sources lists, the line that we should add is:
deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main
Open nano and add the above line to this file:
sudo nano /etc/apt/sources.list.d/llvm.list
Add the repository key, it will make apt
able to verify the downloaded packages.
wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
After that, update your lists:
sudo apt-get update
Then install clang-5:
sudo apt-get install clang-5.0 lldb-5.0 lld-5.0
It should work.
If you want to get a list of all available packages from this newly added repository:
grep -i package: /var/lib/apt/lists/apt.llvm* | cut -f3 -d: | sort | uniq
It will give you a list like:
clang-5.0
clang-5.0-doc
clang-5.0-examples
libclang-common-5.0-dev
...
You can then install whatever of them you want.
It may help your compile problem
The header file that has been mentioned does not exist in your error: stdarg.h
is a part of libstdc++-5-dev
package.
I've got this package on my machine, so if I run:
aptitude why libstdc++-5-dev
I will get:
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)
So it seems that installing the build-essential
package should solve this error of yours, cause I'm not sure what you've done.