dyld:库未加载...原因:图像未加载

rwo*_*lst 228 macos dylib otool dyld install-name-tool

尝试运行我在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
Run Code Online (Sandbox Code Playgroud)

我已经安装了boost库,它们位于/opt/local/lib.我认为这个问题与可执行文件有关,只查看它所在的目录,就像我在那里粘贴'libboost_atomic.dylib'一样,它不再关心它了.不幸的是,它抱怨它无法找到下一个升级库.

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

tro*_*foe 144

找到所有的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)
Run Code Online (Sandbox Code Playgroud)

对于每一个libboost_xxx.dylib,做:

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile
Run Code Online (Sandbox Code Playgroud)

最后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)
Run Code Online (Sandbox Code Playgroud)

联机帮助页: otool install_name_tool

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

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

  • 'exefile':没有这样的文件或目录 (11认同)
  • @ScottyBlades `exefile` 代表您尝试运行的可执行文件。就我而言,`otool -L /usr/local/bin/php` 成功了。 (7认同)
  • 实际上更好的方法是使用`DYLD_LIBRARY_PATH`来修改搜索路径。另一个答案得到了这个。 (4认同)
  • @trojanfoe你可以在这里解释什么是exefile它是一个工具exec文件路径?不是吗? (3认同)
  • @JordannGross提出一个新问题. (3认同)
  • 重新编译可执行文件后,我必须重复此过程 - 在开发过程中非常烦人。 (2认同)

Him*_*dia 94

在目标中General tab,有一个Embedded Binaries field.

添加必需framework和崩溃已解决.

在此输入图像描述

点击+标志并添加framework

  • 我应该添加什么?有很多文件 (3认同)

osh*_*ken 67

这对我有用:

brew upgrade node
Run Code Online (Sandbox Code Playgroud)

  • @diegoaguilar 这是使用自制程序重新安装“node”。可能另一个安装破坏了节点路径。也为我工作过。 (7认同)
  • 不过,这是在做什么? (4认同)

Wal*_*tes 34

这应该可以解决问题

brew update
brew upgrade
brew cleanup
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说完全有效,但是,在尝试进行清理时,我遇到了一些权限问题,如果您也遇到这个问题,请尝试运行 sudo chown -R $(whoami) /usr/local/lib 然后尝试运行brew再次清理 (2认同)

mar*_*hiz 31

对于某些人来说,这可以像为动态库设置系统路径一样简单.在OS X上,这与设置DYLD_LIBRARY_PATH环境变量一样简单.看到:

在Mac OS X上使用DYLD_LIBRARY_PATH是否可以?而且,它的动态库搜索算法是什么?

  • 这个答案是最通用的*并且可以说明一点:如果你有自定义/用户库,那么这就是你要走的路. (2认同)
  • 这可能看起来很愚蠢,但我想知道我应该将 `DYLD_LIBRARY_PATH` 设置为什么值? (2认同)
  • @Caesar 将其设置为您尝试链接的 dylib 所在的目录。 (2认同)

Mic*_*ich 28

将Mac OS升级到Mojave之后。我试图通过yarn错误命令来安装npm模块:

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
  Referenced from: /usr/local/bin/node
  Reason: image not found
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

已解决:

brew update
brew upgrade
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我还运行了“brew cleanup”命令,如果您想摆脱旧版本,有时这样做很好。 (5认同)
  • 当我最近更新 xcode 时,我的 IntelliJ 开始抛出此错误。我试图通过 intellij 运行 Node.js 服务器。我不确定出了什么问题。在我的系统上运行“node --version”导致了同样的错误。运行上面两个命令解决了我的问题。 (2认同)

Ion*_*ger 13

当我尝试使用rvm安装ruby 2.3.1时出现此错误.它首先告诉我运行brew update,我做了,然后当我尝试运行时rvm install ruby-2.3.1,我收到了这个SO问题中的错误.

修复是第一次运行brew upgrade,显然根据这个superuser.com问题你需要做两个brew update&& brew upgrade.一旦完成,我终于可以安装ruby 2.3.1.

  • 人们需要停止建议像这样进行“酿造升级”。这可能会对整个系统造成巨大的破坏。相反,隔离需要升级的内容并仅升级该内容。 (2认同)

Jay*_*der 10

现在 Xcode 已经升级了他们的 IDE,他们已经稍微改变了它的功能。

它曾经被分成单独的部分,如上所示,“嵌入式二进制文件”和“链接框架和库”作为单独的部分。

现在,它是一个组合部分,右侧有关于应该嵌入什么的下拉菜单。

新的 IDE 更改

起初这让我感到困惑,但现在完全有道理。


atu*_*tri 10

如果您使用的是 Xcode 11 以上版本:

转到General选项卡并在Frameworks, Libraries, and Embedded Content部分中添加框架。

重要提示:默认情况下,它可能被标记为Do Not Embed,将其更改为Embed Without Signing如图所示,您就可以开始使用了。

在此处输入图片说明

对于低于 11 的 Xcode 版本:

只需在Embedded Binaries部分中添加框架即可完成。

干杯!


Kwe*_*wex 10

要解决我的 Macbook Catalina 10.15.4 上的以下错误:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    Referenced from: /usr/local/bin/mongoexport
    Reason: image not found
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

我运行了下面的命令并解决了上面的问题:

brew switch openssl 1.0.2s
Run Code Online (Sandbox Code Playgroud)


The*_*ght 5

您可以将带有-L选项的otool命令用于可执行文件,该命令将显示可执行文件期望这些库的位置.

如果需要更改的路径,请使用install_name_tool命令,该命令允许您设置库的路径.


Luc*_*iva 5

我来到这里试图运行一个使用CMake编译的程序。当我尝试运行它时,它抱怨说:

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我规避了告诉CMake使用Boost的静态版本,而不是让它使用动态版本的问题:

set(Boost_USE_STATIC_LIBS ON)
Run Code Online (Sandbox Code Playgroud)


Pra*_*ypa 5

使构建阶段中的框架可选对我有用。

在 Xcode -> Target -> Build Phases -> Link Binary with Libraries -> 确保新添加的框架(如果有)被标记为 Optional


归档时间:

查看次数:

245088 次

最近记录:

5 年,11 月 前