我从源代码构建cyrus sasl2库。 libs安装在/ usr / local / lib中,头文件安装在/ usr / local / include / sasl中,这是正确的。
然而,当我运行试图使用它们的应用程序时,我得到:
dyld: Library not loaded: /libsasl2.dylib
Referenced from: /usr/sbin/postdrop
Reason: image not found
Trace/BPT trap: 5
在lib上运行otool -L会显示错误的相对路径:
libsasl2.dylib:
/libsasl2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
如何更改make编译库的方式以便编码正确的rpath? 我读到了关于install_name_tool以在库中更改它,但似乎没有使用' -change'由于正确的路径,/ usr / local / lib / libsasl2.dylib',比当前编码的路径长。我不能以某种方式建立图书馆时设置它吗?
感谢。
答案 0 :(得分:0)
install_name_tool -id "@rpath/libsasl2.dylib" "/usr/local/lib/libsasl2.dylib"
会改变 LC_ID_DYLIB
的 libsasl2.dylib
。当 postdrop 链接到它时,它会被添加到 postdrop 的 LC_LOAD_DYLIB
中。然后,您可以将 LC_RPATH
的 /usr/local/lib
条目添加到 postdrop,一切都会正常运行。