刚开始学习罗剑锋的《Boost程序库完全开发指南》,在Mac OS下按照Boost时出现了一些问题及解决方案。

环境:OS Yosemite(10.10.3)

Xcode:version 6.3

Boost:1.58.0


操作步骤:

  1. 下载Boost并解压;

  2. 依次./bootstrap.sh ./b2 ./b2 install;

  3. 在Xcode中进行配置(控制台工程),build Setting中添加Header Search Paths和Library Search Paths(为步骤2中安装路径),Build Phases中Link Binary With Libraries添加libboost_system.a;

  4. 测试:mian函数中#include "boost/asio.hpp",编译。


出现错误dyld: Library not loaded: libboost_system.dylib Referenced from: /Users/ShaunYi/Library/Developer/Xcode/DerivedData/LearningBoost-djvlfrwiebzlncahwbsrniqfduuu/Build/Products/Debug/LearningBoost Reason: p_w_picpath not found;

添加libboost_system.dylib后可以编译成功,但执行时会出现如下错误:dyld_fatal_error


原因:因为XCode5 完全切换到了LLVM,丢弃了GCC,所以使用旧版本GCC编译的boost库会出现load library的错误(dylib/dlopen???不是太明白原因),所以必须使用LLVM重新编译库,最好是编译成静态的。


解决方案:

编译boost库时使用如下命令:./bootstrap.sh toolset=clang;./b2 toolset=clang --without-mpi cxxflags="-arch i386 -arch x86_64 -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -ftemplate-depth=512" linkflags="-stdlib=libc++" link=static stage install