使用预编译的clang
http://llvm.org/releases/download.html下载
Download LLVM 3.6.0
Pre-builtBinaries:
Clang for Ubuntu 14.04 (.sig)
解压到 clang+llvm-3.6.0-x86_64-linux-gnu 文件夹
cd clang+llvm-3.6.0-x86_64-linux-gnu
sudo cp -r * /usr/local
在终端输入 clang –v
就能看见安装好的 clang 编译器版本了
加上 libc++
libc++ 是针对 clang 特别重写的 C++ 标准库,也算是 clang 的“御用”库了。这就像 libstdc++ 和 gcc 的关系,但 clang 也可以用 libstdc++
如果想要用 libc++ ,需要拿下它的代码,自己编译,不过非常容易。首先保证你有
subversion:
sudo apt-get install subversion
然后从 libc++ 代码仓库下载代码:
cd~/downloads/
svn cohttp://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cdlibcxx/lib
./buildit
头文件已经生成到 ~/downloads/libcxx/include/,要让 clang找到必须复制到 /usr/include/c++/v1/
cp -r~/downloads/libcxx/include/ /usr/include/c++/v1/
*.so 文件已生成 ~/downloads/libcxx/lib/libc++.so.1.0,要让 clang访问必须复制到 /usr/lib/,并创建软链接
ln -s~/downloads/libcxx/lib/libc++.so.1.0 ~/downloads/libcxx/lib/libc++.so.1
ln -s ~/downloads/libcxx/lib/libc++.so.1.0~/downloads/libcxx/lib/libc++.so
cp~/downloads/libcxx/lib/libc++.so* /usr/lib/
类似,源码安装 libc++abi的头文件和动态链接库:
cd~/downloads/
svn cohttp://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
cdlibcxxabi/lib
./buildit
头文件已经生成到 ~/downloads/libcxxabi/include/,要让 clang找到必须复制到 /usr/include/c++/v1/
cp -r~/downloads/libcxxabi/include/ /usr/include/c++/v1/
\*.so文件已生成~/downloads/libcxx/lib/libc++abi.so.1.0,要让 clang访问必须复制到 /usr/lib/,并创建软链接
ln -s~/downloads/libcxxabi/lib/libc++abi.so.1.0~/downloads/libcxxabi/lib/libc++abi.so.1
ln -s~/downloads/libcxxabi/lib/libc++abi.so.1.0~/downloads/libcxxabi/lib/libc++abi.so
cp~/downloads/libcxxabi/lib/libc++abi.so* /usr/lib/
创建一个 new_feature.cpp
1#include <iostream>
2 #include <string>
3
4 class MyClass
5 {
6 public:
7 std::string s ="Hello, world\n"; // Non-static data member initializer
8 };
9
10int main()
11{
12 std::cout << MyClass().s;
13}
后续可以通过如下选项进行代码编译:
clang++-std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro-expansion-Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic-Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes-Wno-padded -Wno-old-style-cast -lc++ -lc++abi new_feature.cpp
编译选项简单说说:
-std=c++11:使用 C++11 新特性;
-stdlib=libc++:指定使用 clang 的标准库头文件 /usr/include/c++/v1/;
-Werror:将所有编译警告视为编译错误;
-Weverything:打开所有编译警告选项。在 GCC 中,无法通过单个选项打开所有编译警告,必须繁琐的同时指定 -Wall、-Wextra、以及大量分散的其他选项,为此 clang 新增了 -Weverything。
当然,有些警告意义不大,完全可忽略,如下:
-Wno-disabled-macro-expansion:禁止使用宏表达式,忽略此警告;
-Wno-float-equal:浮点类型不应使用 != 和 == 运算符,忽略此警告;
-Wno-c++98-compat、-Wno-c++98-compat-pedantic:采用 C++11 新特性的代码无法兼容 C++98,忽略此警告;
-Wno-global-constructors:在 main() 之前存在执行的代码,忽略此警告;
-Wno-exit-time-destructors:在 main() 之后存在执行的代码,忽略此警告;
-Wno-missing-prototypes:虽有函数定义但缺失函数原型,忽略此警告;
-Wno-padded:结构体大小应为 4 字节整数倍,忽略此警告(编译器自动调整对齐边界);
-Wno-old-style-cast:C 语言的强制类型转换,忽略此警告;
-lc++:指定链接 /usr/lib/libc++.so 标准库(缺失将导致链接失败!);
-lc++abi:指定链接 /usr/lib/libc++abi.so 标准库(缺失将导致链接失败!)。
输出熟悉的 Hello, world
clang 就算正式能用了。
ubuntu 12.04 clang 3.4安装:http://www.linuxdiyf.com/linux/14234.html
在Linux CentOS上编译并安装Clang 3.5.0:http://www.linuxdiyf.com/linux/11534.html