参考文章:https://github.com/yangyangwithgnu/use_vim_as_ide#7.1.1
http://www.linuxdiyf.com/linux/14259.html
一、不需源码编译和手动配置libc++,libc++abi的可忽略这一部分
关于如何下载llvm,clang, libc++,libc++abi源码请参考第一篇文章第7部分,也可以参考官网有相关安装说明:http://clang.llvm.org/get_started.html。
第一篇文章是手动安装LLVM/clang和配置libc++,libc++abi,第二篇文章是采用预编译包安装LLVM/clang-3.6和手动配置libc++,libc++abi。我之前是参照第一篇文章源码安装,没有问题,但在配置libc++abi出现了问题,在./buildit 时出现了如下错误:
../src/cxa_aux_runtime.cpp:15:10: fatal error: ‘typeinfo’ file not found
我能知道的是typeinfo是C++标准库,尚未找到解决办法,不知哪位大神能相告,如是便不甚感激!
这个问题没法解决,但是我通过另一个方法绕过了这个,我下载了预编译包,然后将lib文件夹中的libc++.so,libc++.so.1,libc++.so.1.0,
libc++abi.a,libc++abi.so,libc++abi.so.1,libc++abi.so.1.0拷贝到/usr/lib/,然后将下载的libc++,libc++abi源码包里的include文件夹里面的东西都拷贝到/usr/include/c++/v1/下,没有v1目录就自己建一个。相关参考命令如下:
sudo cp -r ~/下载/clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04/lib/libc++* /usr/lib/
sudo cp -r ~/下载/libcxxabi/include/* /usr/include/c++/v1/
sudo cp -r ~/下载/libcxx/include/* /usr/include/c++/v1/
这样弄完了也能用。不过下面介绍一种更为简单的方法。
二、更为简单的方法
操作系统:Ubuntu14.04,64位。类似可以推广到其它Linux系统。
其实Ubuntu14.04安装LLVM/clang-3.7很简单,直接到LLVM官网(http://llvm.org/releases/download.html#3.7.0)下载ubuntu预编译包(Pre-Built Binaries)——Clang for x86_64 Ubuntu 14.04 (.sig)。然后解压,进入到解压的文件夹里(里面有四个文件夹bin,include,lib,share),将这四个文件夹拷到/usr/local下(命令行是$sudo cp -r ~/放解压文件的目录名/clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04/* /usr/local)即可。在终端输入 clang –v ,就能看见安装好的 clang 编译器版本了。 libc++和libc++abi已经配置好,直接使用即可(以前的3.6版本的是没有配置好的,需要自己配置)。
其它Linux操作系统下载对应的相关预编译包,按照前述步骤也可使用。想要知道预编译包是否配置了 libc++和libc++abi,可到解压的文件里的lib文件夹里看看是否有libc++.so,libc++.so.1,libc++.so.1.0,libc++abi.a,
libc++abi.so,libc++abi.so.1,libc++abi.so.1.0文件,有的话就表示支持。
三、测试代码
建立一个名为new_feature.cpp的文档,写入:
#include <iostream>
#include <string>
class MyClass
{
public:
std::string s ="Hello, world\n"; // Non-static data member initializer
};
int main()
{
std::cout << MyClass().s;
}
保存。在终端输入:
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
如果没问题的话会生成a.out的二进制文件,运行它会显示出Hello,world。这时就大功告成了。
主要编译选项:
-std=c++11:使用 C++11 新特性;
-stdlib=libc++:指定使用 clang 的标准库头文件 /usr/include/c++/v1/;
-lc++:指定链接 /usr/lib/libc++.so 标准库(缺失将导致链接失败!);
-lc++abi:指定链接 /usr/lib/libc++abi.so 标准库(缺失将导致链接失败!)。
其它编译选项请查看第一篇或第二篇文章。
四、附录
何为clang,LLVM,libc++,libc++abi?具体参见官网http://llvm.org/。
这里简单说两句:LLVM 是个很大很大的项目群,几乎把从编译到调试的各个构建环节都重新实现了一遍,目的:一是尽可能地模块化现有代码以方便在此基础上进行二次开发、一是提供比传统构建工具链更好的用户体验。clang是LLVM的子项目,是一款非常优秀的C++ 编译器,前端 clang + 后端 LLVM(后简称 LLVM/clang)就是一款可替代 GCC 的优秀编译器。
GCC 配套的标准库涉及 libstdc++ 和 libsupc++ 两个子库,前者是接口层(即,上层的封装),后者是实现层(即,底层的具体实现),对应到clang,则libc++(接口层)和 libc++abi(实现层)。