ChatGPT解决这个技术问题 Extra ChatGPT

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

尝试运行我在 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 库。

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

如果您仍然有问题使用此topic中的方法
尝试使用以下命令卸载 python3.7.3:- huybien.com/how-to-completely-uninstall-python-on-macos

A
Alex Shroyer

查找所有 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 上公开了这个脚本。


@trojanfoe你能在这里解释一下什么是exe文件,它是一个工具执行文件路径吗?不是吗?
重新编译可执行文件后,我必须重复这个过程——在开发过程中很烦人。
其实更好的方法是使用 DYLD_LIBRARY_PATH 来修改搜索路径。另一个答案得到了这个。
'exefile': 没有这样的文件或目录
@ScottyBlades exefile 代表您尝试运行的可执行文件。就我而言,otool -L /usr/local/bin/php 成功了。
o
oshaiken

这对我有用:

brew upgrade node

不过,这是在做什么?
@diegoaguilar 这是使用自制软件重新安装 node。可能另一个安装破坏了节点路径。也为我工作。
更新 macOS Catalina 后它对我有用。谢谢!
同样在这里,我用 brew upgrade node 修复了它(OSX Catalina)
这应该是公认的答案。为大多数人省去很多麻烦。
H
Himanshu padia

在目标的 General 标签中,有一个名为 Frameworks, Libraries, and Embedded Content 的部分

单击 + 符号,添加必需的 framework,崩溃就解决了。

https://i.stack.imgur.com/bbMdY.png


我应该添加什么?有很多文件
@Himanshu 我的项目有 libcppreset!它与 boost 有很多依赖关系......我运行一个 bash 脚本来使用 install_name_tool 更改它们,但是对于 LC_ID_DYLIB,我不需要在 usr/loca/opt 中创建一个符号链接!有什么办法可以弄清楚吗? :|很痛苦:(
添加框架并将框架设置为 Embed & Sign
M
Michael Klishevich

将 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

已修复:

brew update
brew upgrade

当我最近更新 xcode 时,我的 intelliJ 开始抛出此错误。我试图通过 intellij 运行 node.js 服务器。我不确定出了什么问题。在我的系统上运行 node --version 导致了同样的错误。运行以上两个命令解决了我的问题。
就我而言,我还运行了 brew cleanup 命令,如果您想摆脱旧版本,有时这样做是件好事。
关于@MichaelBehrens 的评论,我运行 brew cleanup 然后它修复了。
C
Community

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

Is it OK to use DYLD_LIBRARY_PATH on Mac OS X? And, what's the dynamic library search algorithm with it?


这可能看起来很愚蠢,但我想知道我应该将 DYLD_LIBRARY_PATH 设置为什么值?
@Caesar 将其设置为您尝试链接的dylib 所在的目录。
您不能期望您的用户更改 DYLD_LIBRARY_PATH。正确的解决方案是在 .app 中包含非标准库,用户无需执行任何操作。但是,开发人员可能仍然需要按照我的回答破解加载程序路径。
@trojanfoe .app?有一个测试可执行文件,试图链接一些 .dylib 。 Linux 与 LD_LIBRARY_PATH 相同
太简单。谢谢!想知道其他答案是什么,以及 brew 会如何做类似的事情......
W
Walterwhites

这应该可以解决问题

brew update
brew upgrade
brew cleanup

不幸的是,使用它对我有用,我仍然不知道问题的原因是什么,或者为什么更新、升级和清理可以解决问题
这对我来说完全有效,但是,在尝试进行清理时,我遇到了一些权限问题,如果您也遇到此问题,请尝试运行 sudo chown -R $(whoami) /usr/local/lib 然后尝试运行 brew再次清理
运行后我仍然得到 ImportError: cannot import name 'ssl' from 'urllib3.util.ssl_' (/Users/foo/.local/share/virtualenvs/TMIWqqTS/lib/python3.7/site-packages/urllib3/util/ssl_.py)
我通过重新安装 python 修复了我的后续错误。我使用 asdf 来管理我的语言版本,所以我执行了 asdf uninstall python 3.7.3(我使用的是 3.7.3,在此处指定您拥有的版本),然后运行 asdf install python 3.7.3
如果直到不起作用: brew services start php
C
Community

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

解决方法是首先运行 brew upgrade,显然根据这个 superuser.com 问题,您需要同时执行 brew update && brew upgrade。完成后,我终于可以安装 ruby 2.3.1。


人们需要停止推荐这样做brew upgrade。这可能对一个人的整个系统造成巨大的破坏。相反,隔离需要升级的内容并仅升级。
p
pkamb

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

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

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

https://i.stack.imgur.com/DoikR.png

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


a
atulkhatri

如果您使用的是 Xcode 11 及更高版本:

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

重要提示:默认情况下,它可能会标记为 Do Not Embed,将其更改为 Embed Without Signing,如图所示,一切顺利。

https://i.stack.imgur.com/TM4Hp.jpg

对于 11 以下的 Xcode 版本:

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

干杯!


K
Kwex

要解决我的 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

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

brew switch openssl 1.0.2s

对此的任何解释都会有所帮助。
在我看来,可执行文件甚至不应该链接到 libssl.1.0.0.dylib,而是链接到 libssl.1.dylib,它将符号链接到系统上的确切版本,同时保持 API 兼容性。请参阅this
T
TheDarkKnight

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

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


P
Pradeep Reddy Kypa

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

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


L
Lucio Paiva

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

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found

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

set(Boost_USE_STATIC_LIBS ON)

u
user3835452

我通过 brew install libpng 修复它


p
pkamb

如果您使用 cmake,请将 DYLIB_INSTALL_NAME_BASE "@rpath" 添加到目标属性:

set_target_properties(target_dyLib PROPERTIES
        # # for FRAMEWORK begin
        # FRAMEWORK TRUE
        # FRAMEWORK_VERSION C
        # MACOSX_FRAMEWORK_IDENTIFIER com.cmake.targetname
        # MACOSX_FRAMEWORK_INFO_PLIST ./Info.plist
        # PUBLIC_HEADER targetname.h
        # # for FRAMEWORK end
        IPHONEOS_DEPLOYMENT_TARGET "8.0"
        DYLIB_INSTALL_NAME_BASE "@rpath" # this is the key point
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
        DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
    )

或在 Xcode 动态库项目 Target -> Build Setting set Dynamic Library Install Name Base to @rpath


我创建了一个可可框架动态库项目,它可以工作,并且与我糟糕的 cmake 生成的项目相比,发现这个不同,并修复它,它可以在 iOS 上工作。
p
pkamb

我通过使用 Product > Clean Build Folder (CommandShiftK) 解决了这个问题,这使得新的干净构建非常奇怪。


p
pkamb

对于我的框架,我使用的是作为 git 子模块添加的 Xcode 子项目。

我相信我遇到了这个错误,因为我使用与我的主应用程序不同的签名团队签署了框架。 (为应用切换团队;忘记切换框架)

解决方案是在框架项目内签名。相反,在主应用程序的 Target > General > Frameworks, Libraries, and Embedded Content 部分,通过 Embed & Sign 对框架进行签名。

如果我选择 Do not EmbedEmbed Without Signing,则会收到错误消息:

FRAMEWORK 在使用库验证的过程中无效:映射文件没有 cdhash,完全未签名?代码必须至少是临时签名的。


h
hailuodev

您可以使用 sudo install_name_tool -change 更改 dylib 路径和 sudo install_name_tool -id 更改 dylib 名称


b
bormat

如果您使用 virtualenv,只需删除您的环境文件夹并使用此命令重新创建它 virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


S
Saranjith

Xcode 11.1 & 斯威夫特 5.1

快速解决

首先确保在常规选项卡,嵌入二进制文件中选择了外部添加的库有选项嵌入。

如果还是不行。。

发生这种情况是因为您存在不同的、不匹配的库版本。

更新 Pod

pod update

重要提示:检查所有库是否包含在构建设置 -> 库和框架列表中,并且您已提供嵌入构建的选项

工作真棒


R
Roger Oba

在我们的例子中,它是一个 iOS 应用程序,基于 Xcode 11.5 构建,使用 cocoapods(如果你愿意,还可以使用 cocoapods-binary)。

我们看到了这个崩溃:

dyld: Library not loaded: @rpath/PINOperation.framework/PINOperation
  Referenced from: /private/var/containers/Bundle/Application/4C5F5E4C-8B71-4351-A0AB-C20333544569/Tellus.app/Frameworks/PINRemoteImage.framework/PINRemoteImage
  Reason: image not found

原来我必须删除 pod 缓存并重新运行 pod install,所以 Xcode 会指出这个差异:

https://i.stack.imgur.com/664KM.png


b
bolnad

对于任何访问此页面的人,因为他们在尝试使用 Xcode 6.3.1 将第三方框架链接到他们的项目时遇到此错误,我遇到的问题是因为该库是使用旧版本的编译器使用不同版本创建的迅速的。对我来说解决这个问题的唯一方法是重新构建框架。

Apple 技术文档中说明了您可能会遇到此问题的另一个原因。

如果您正在构建的应用程序不使用 Swift 但嵌入了框架等内容,那么 Xcode 将不会在您的应用程序中包含这些库。因此,您的应用程序将在启动时崩溃,并显示如下错误消息:

在您的应用中将 Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) 构建设置设置为 YES

这是完整的 Apple 文档的链接,对其进行了解释here


b
brunouno

对于使用不同库或包遇到相同问题的任何人,@user3835452 都在正确的轨道上。我在尝试运行 composer 时发现了这条消息:

dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
  Referenced from: /usr/local/opt/php@7.1/bin/php
  Reason: image not found
Abort trap: 6

在尝试了很多不同的方法后,我只运行了 brew install openldap 并修复了它。请注意,我已经运行了 brew updatebrew upgrade,但只有在我手动安装 openldap 之后它才真正起作用。


我有一个类似的问题dyld:未加载库:/usr/local/opt/fftw/lib/libfftw3f.3.dylib。在检查了许多可能的解决方案之后,我只是做了 brew install fftw 并且它对我有用。谢谢@brunouno
c
confused00

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

我刚刚使用了 brew upgrade <the tool>。就我而言,brew upgrade tmux


G
Gino

在我的情况下,它是过时的节点,您需要在升级到 BigSur 后升级它 - brew upgrade node


s
serv-inc

https://gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded中所述,您可以尝试

brew uninstall --ignore-dependencies node icu4c
brew install node
brew link --overwrite node

A
Ammar Mujeeb

快速解决

通过在您的 Podfile 中注释它来删除 pod(其名称在错误中),例如 #Podname

运行 pod 安装

取消注释您之前评论过的 pod

再次运行 pod install。

它对我有用,并且很容易分享它。


p
pkamb

我遇到了在线程中引用 SIGABRT 错误的应用程序崩溃问题。崩溃的概述是未加载 dyld 库并且未找到类似的图像。

这在 Xcode 9.3 中可以看到。我发现的原因是 Xcode 没有动态地获取库,所以我不得不手动完成它,这解决了我的崩溃问题。

请按照以下步骤操作:

转到构建阶段点击顶部的“+”按钮并选择“新建复制文件阶段”选择目标作为框架并点击下面的“+”按钮添加文件。选择下方添加其他,点击 CMD+SHIFT+G 并粘贴以下路径,/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

现在您将能够看到一些 swift dylib,选择所有扩展名为 .dylib 的 swift 库,然后单击打开。

这些将被添加到应用程序的常规选项卡中的嵌入式二进制文件中。

在项目文件夹中创建一个新组并添加所有这些库。

现在运行您的应用程序。


S
Shrm

如果您在终端中使用 Conda 环境,请更新 samtools 以解决它。

conda install -c bioconda samtools


s
sandroid

最好的答案是上面首先检查什么是输出

otool -L

如果不正确,请执行以下操作

set_target_properties(
    MyTarget
    PROPERTIES
    XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS
    "@executable_path/Frameworks @loader_path/Frameworks"
)

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"