使用标准:
% ./bootstrap.sh
% sudo ./b2 install
在MacOS 10.11.2上构建Boost v1.60.0,但libboost _ * .dylib文件中的install_name条目是相对的,没有绝对路径:
% otool -D /usr/local/lib/libboost_python.dylib
可生产
/usr/local/lib/libboost_python.dylib:
libboost_python.dylib
尝试将libboost_python.dylib与Apple的标准python一起使用时会出现问题,这会导致在使用Boost.Python导入库时不安全地使用相对rpath:
% python
>>> import mylibrary
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/path/to/mylibrary.so, 2): Library not loaded: libboost_chrono.dylib
Referenced from: /path/to/mylibrary.so
Reason: unsafe use of relative rpath libboost_chrono.dylib in /path/to/mylibrary.so with restricted binary
使用:
sudo install_name_tool -id /usr/local/lib/libboost_chrono.dylib /usr/local/lib/libboost_chrono.dylib
几乎解决了这个问题,除了在编译boost期间从一个libboost_库到另一个库(即libboost_thread链接到libboost_atomic)的引用保持相对,因此需要在编译期间运行install_name_tool。或者使用非标准的Python不会抱怨。但是我希望能够指定在构建Boost时正确生成install_name,理想情况下作为b2的参数,但是无法确定如何?我试过(不可否认是一个长镜头):
sudo ./b2 dll-path=/usr/local/lib install
没有成功。