OS X:编译后dylib rpath错误

时间:2014-07-15 17:51:33

标签: dylib rpath otool

我从源代码构建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',比当前编码的路径长。我不能以某种方式建立图书馆时设置它吗?

感谢。

1 个答案:

答案 0 :(得分:0)

install_name_tool -id "@rpath/libsasl2.dylib" "/usr/local/lib/libsasl2.dylib" 会改变 LC_ID_DYLIBlibsasl2.dylib。当 postdrop 链接到它时,它会被添加到 postdrop 的 LC_LOAD_DYLIB 中。然后,您可以将 LC_RPATH/usr/local/lib 条目添加到 postdrop,一切都会正常运行。