在 ubuntu14.04 上安装 clang 3.6

本文所有操作来自下面两篇博客


http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html

 

https://github.com/hh8456/use_vim_as_ide/blob/master/README.md#7.1.1

 


使用预编译的 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 co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx

cd libcxx/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 co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi

cd libcxxabi/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
 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 就算正式能用了。

 

你可能感兴趣的:(linux)