Tìm tất cả các thư viện boost:
$ otool -L exefile
exefile:
@executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
và cho mỗi libboost_xxx.dylib
, làm:
$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
và cuối cùng xác minh bằng cách sử dụng otool
lại:
$ otool -L exefile
exefile:
/opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Trang web: otool
install_name_tool
EDIT Một thời gian trước tôi đã viết một kịch bản python ( copy_dylibs.py
) để tự động xử lý tất cả những thứ này khi xây dựng một ứng dụng. Nó sẽ đóng gói tất cả các thư viện từ /usr/local
hoặc /opt/local
vào gói ứng dụng và sửa các tham chiếu đến các thư viện đó để sử dụng @rpath
. Điều này có nghĩa là bạn có thể dễ dàng cài đặt thư viện của bên thứ ba bằng Homebrew và đóng gói chúng dễ dàng như vậy.
Bây giờ tôi đã công khai kịch bản này trên github .