刚开始学习罗剑锋的《Boost程序库完全开发指南》,在Mac OS下按照Boost时出现了一些问题及解决方案。
环境:OS Yosemite(10.10.3)
Xcode:version 6.3
Boost:1.58.0
操作步骤:
- 下载Boost并解压;
- 依次./bootstrap.sh ./b2 ./b2 install;
- 在Xcode中进行配置(控制台工程),build Setting中添加Header Search Paths和Library Search Paths(为步骤2中安装路径),Build Phases中Link Binary With Libraries添加libboost_system.a;
- 测试: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: image 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