在MacOS X上设置install_name building boost 1.60.0?

时间:2016-02-10 17:24:28

标签: python c++ macos boost linker

使用标准:

% ./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

没有成功。

0 个答案:

没有答案