小编典典

dyld:库未加载...原因:找不到图像

all

尝试运行我在 Mac OS X 中发送的可执行文件时,出现以下错误

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

我已经安装了 boost 库,它们位于/opt/local/lib.
我认为这个问题与可执行文件有关,它只在它所在的目录中查找,就像我在其中粘贴“libboost_atomic.dylib”时一样,它不再介意它了。不幸的是,它抱怨找不到下一个
boost 库。

有没有简单的方法来解决这个问题?


阅读 94

收藏
2022-03-25

共1个答案

小编典典

查找所有 boost 库(exefile可执行文件的名称在哪里):

$ 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)

对于每一个libboost_xxx.dylib,做:

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

最后otool再次验证使用:

$ 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)

手册页:otool
install_name_tool

编辑 不久前 ,我编写了一个 python 脚本 ( copy_dylibs.py)
以在构建应用程序时自动解决所有这些问题。它将从应用程序包中打包所有库/usr/local或将所有库打包/opt/local到应用程序包中,并修复对这些库的引用以使用@rpath.
这意味着您可以使用 Homebrew 轻松安装第三方库并轻松打包它们。

我现在已经在github上公开了这个脚本。

2022-03-25