mac下编译llvm/clang/libcxx并安装在/usr/local下

发布日期:2013-05-05 10:12:45

其实xcode自带的就有clang,版本也非常非常新。但是缺了一些我需要的组件,于是我得自己重新编译一下。但是我又不想覆盖原来的clang/libc++。因为那很危险,万一我编译的libc++有bug,而我又拿它覆盖了系统本身的libc++,那么我很可能连系统都进不去了。Linux用户不妨对比下自行编译glibc的风险。

我也不知道apple对clang改了什么,我是从llvm官网上下载代码并编译。www.it165.net

官网有文档,但是那文档有些问题。在我机器上行不通。我摸索出另一个办法。

首先编译llvm/clang

目录树如下:

llvm: http://llvm.org/svn/llvm-project/llvm/trunk

llvm/tools/clang: http://llvm.org/svn/llvm-project/cfe/trunk

llvm/tools/clang/tools/extra: http://llvm.org/svn/llvm-project/clang-tools-extra/trunk

llvm/projects/compiler-rt: http://llvm.org/svn/llvm-project/compiler-rt/trunk

然后在llvm目录下运行

./configure —enable-libcpp —enable-cxx11 —enable-keep-symbols —disable-docs —enable-debug-runtime —enable-debug-symbols —enable-optimized CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++

make

make install

XCode软件包里我故意删掉了command line tools,以免造成冲突。

然后就是libcxxabi和libcxx

libcxxabi: http://llvm.org/svn/llvm-project/libcxxabi/trunk

libcxx:http://llvm.org/svn/llvm-project/libcxx/trunk

先装abi,后装libcxx。

buildit之前先export TRIPLE=-apple-  

这还不够,打开lib/buildit文件,把install_name后面的/usr/lib/libc++abi.dylib 改成/usr/local/lib/libc++abi.dylib 才行。

然后

./buildit

手动将编译好的文件copy到/usr/local/lib目录下。

然后libcxx也是类似,先修改buildit文件。

这些都完成之后,还不够。编译的时候要先用-nostdinc++禁止从/usr/lib目录下寻找头文件和库文件。然后手动把我们的目录包含进去,如下:

clang++ -o t -nostdinc++ -std=c++11 -stdlib=libc++ -I /usr/local/lib/c++/v1  -L/usr/local/lib test.cpp

之后再用otool 看就对了

$ otool -L ./t

./t:

        /usr/local/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)

        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

 出处:http://blog.sunchangming.com/post/49496188634

Tag标签: mac  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规