【问题标题】:Fix paths in dylib files using install_name_tool使用 install_name_tool 修复 dylib 文件中的路径
【发布时间】:2015-10-23 06:53:23
【问题描述】:

在将操作系统更新到 El Capitan 后,我正在尝试编译我的 C++ 项目。但是,我在此过程中遇到了一些障碍:

dyld: Library not loaded: pathB/libIceUtil.34.dylib
Referenced from: pathA/libSlice.34.dylib
Reason: image not found

问题是pathB 不存在。当我运行otool -L pathA/libIceUtil.34.dylib 时,我得到了

pathA/libIceUtil.34.dylib:
pathB/libIceUtil.34.dylib (compatibility version 0.0.0, current version 0.0.0)

install_name_tool -change pathB/libIceUtil.34.dylib pathA/libIceUtil.34.dylib pathA/libIceUtil.34.dylib 没有解决问题。 article 提到使用 libtool。知道如何解决这个问题吗?

【问题讨论】:

  • 你想把它改成什么?
  • @trojanfoe /Volumes/Data/builder/ 前缀 --> /Users/xeroqu/lib/prefix。我也修改了问题。
  • 你不希望它相对于可执行文件吗?
  • @trojanfoe 不一定。我想修复这些路径...
  • install_name_tool 是要使用的东西。

标签: macos dynamic-linking dylib otool install-name-tool


【解决方案1】:

install_name_tool -change 的第一个参数不正确(它与 otool -L 打印的不匹配)。使用:

install_name_tool -change \
    /Volumes/Data/builder/Proj/gcc4/thirdparty/Ice-3.4.2-x86_64/lib/libIceUtil.34.dylib \
    /Users/xeroqu/lib/Proj/gcc4/thirdparty/Ice-3.4.2-x86_64/lib/libIceUtil.34.dylib \
    /Users/xeroqu/lib/Proj/gcc4/thirdparty/Ice-3.4.2-x86_64/lib/libIceUtil.34.dylib

【讨论】:

  • 你是对的,因此 +1。但是,我通过复制、更改项目名称并将其粘贴到此处犯了一个可怕的错误——所以答案不是我想要的。这次我简化了问题。很抱歉给您带来麻烦。
  • 我不知道还有什么建议。我过去曾成功使用install_name_tool 解决过此类问题。它有可能与库本身中的依赖库有关......
  • 有趣的是,它对可执行文件没有问题,但对 dylib 没有问题。感谢您的提示
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 2012-05-08
  • 2016-03-03
  • 2019-08-29
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多