linux下编译clang, libc++, libc++abi,以及第二遍自举编译

使用 xx-linux-gcc 交叉编译clang时候, 由于 交叉编译器自身问题 导致出现

br 指令跳转 地址 大于20bit 就会溢出报错。

解决方法:

针对报错的文件 ,修改 switch case代码 , 把 case里面的代码改 写成函数,这样 就会减少语句条数。

 

 

转自:

因为原作者写的非常精简,故仅能做一个参考而已。

 

最新的mint16,附带gcc4.8.1



第一步:用gcc编译clang


1.

下载llvm+clang最新版本。具体见http://clang.llvm.org/get_started.html


2.

mkdir build_with_gcc

cd build_with_gcc

../llvm/configure --disable-assertions --enable-optimized

make


3.

vi .bashrc

写入

export PATH=$PATH:/home/username/clang/build_with_gcc/Release/bin


第二步,用刚编译好clang++以及libsupc++编译libc++


1.

下载libc++,见http://libcxx.llvm.org/


2.

mkdir libcxxbuild_with_libsupc

cd libcxxbuild_with_libsupc

CC=clang CXX=clang++ cmake -G "Unix Makefiles" -DLIBCXX_CXX_ABI=libsupc++ -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS="/usr/include/c++/4.8/;/usr/include/x86_64-linux-gnu/c++/4.8/" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../libcxx


上面一步必须libsupc++,libstdc++有问题。


3.

make

sudo make install


第三步,用编译好的clang++及libc++编译libc++abi


1. 下载,见http://libcxxabi.llvm.org/


2.

cd libcxxabi/lib

./buildit


3.

sudo cp libc++abi.so.1.0 /usr/lib/libc++abi.so.1.0

cd /usr/lib

sudo ln -s libc++abi.so.1.0 libc++abi.so.1

sudo ln -s libc++abi.so.1 libc++abi.so


第四步,用clang 以及新编译的libc++abi,第二次编译libc++


1.

mkdir libcxxbuild_with_libcxxabi

cd libcxxbuild_with_libcxxabi

CC=clang CXX=clang++ cmake -G "Unix Makefiles" -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_LIBCXXABI_INCLUDE_PATHS="../libcxxabi/include" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../libcxx


2.

make

sudo make install


第5步,用clang,libc++,libc++abi,重新编译clang


1.

mkdir build_with_clang

LDFLAGS=-lc++abi ../llvm/configure --disable-assertions --enable-optimized --enable-libcpp


2.

make


3.

vi .bashrc

删掉之前的,写入下面

export PATH=$PATH:/home/username/clang/build_with_clang/Release/bin



第6步,测试

clang++ a.cc

clang++ a.cc -stdlib=libc++ -lc++abi

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值