转载

在Mac下使用libc++编译v8

Mac从10.7开始,系统默认的标准库改成了 libc++ ,支持c++11标准,系统里也还有之前的libstdc++,但它是一个固定的旧版本,不支持c++11标准。虽然大的趋势是都使用 libc++ ,但是还有不少老项目在使用libstdc++编译,导致跟其它库混合使用的时候可能会出现链接错误。chrome v8 就是这样,默认的编译配置是依赖libstdc++的而不是 libc++ ,导致编译出来的静态库放到Skia项目里无法直接使用(Skia默认编译配置是依赖 libc++ )。要解决这个问题,我们编译一个 libc++ 版的v8静态库即可。

在终端进入v8目录后,分别执行以下命令就可以了:

export CXX="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -std=c++11 -stdlib=libc++"  export LINK="`/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -std=c++11 -stdlib=libc++"  export GYP_DEFINES="clang=1 mac_deployment_target=10.7"  make native 

目前只找到使用 make 命令的这种方式可以生成 libc++ 版的v8静态库,使用 gyp/ninja 的还不行。所以编译过程会比较慢,耐心等一会,然后在 out/native/ 下就可以找到生成的静态库。

很奇怪,后来看了下chromium项目里,在Mac上也是直接用 libc++ 编译v8的,但是v8项目的默认编译配置却是依赖libstdc++的,不知道是不是来不及更新还是有历史原因。理论上,如果用libc++编译的话,Mac最低就只能支持到10.7版本以上。又看了一下chrome的下载页面,发现它在Mac上最低支持版本居然是10.9。所以应该完全不用考虑10.6了,全都使用 libc++ 编译合情合理。

原文  http://www.idom.me/articles/844.html
正文到此结束
Loading...