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

时间:2013-07-17 15:08:03

标签: macos dylib dyld otool 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

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

有一种简单的方法可以解决这个问题吗?

37 个答案:

答案 0 :(得分:134)

找到所有的升级库:

$ 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上公开此脚本。

答案 1 :(得分:74)

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

添加必需的framework并解决崩溃问题。

enter image description here

点击+符号并添加framework

答案 2 :(得分:45)

这对我有用:

brew upgrade node

答案 3 :(得分:28)

对于某些人来说,这可以像设置动态库的系统路径一样简单。在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?

答案 4 :(得分:16)

这应该可以解决问题

brew update
brew upgrade
brew cleanup

答案 5 :(得分: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。

答案 6 :(得分:9)

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

答案 7 :(得分:8)

将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

答案 8 :(得分:5)

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

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

答案 9 :(得分:4)

现在Xcode升级了他们的IDE,他们对此功能的方式做了一些改动。

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

现在,它是一个合并的部分,右边带有下拉列表,显示应嵌入的内容。

New IDE Changes

起初这让我感到困惑,但现在已经很合理了。

答案 10 :(得分:4)

我来到这里试图运行我刚刚使用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)

答案 11 :(得分:3)

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

在Xcode中->目标->构建阶段->使用库链接二进制文件-> 确保新添加的框架(如果有的话)标记为“可选”

答案 12 :(得分:2)

我按brew install libpng

修复了它

答案 13 :(得分:2)

如果您从Xcode 11开始使用:

转到General标签,然后在Frameworks, Libraries, and Embedded Content部分中添加框架。

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

enter image description here

对于11以下的Xcode版本:

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

干杯!

答案 14 :(得分:1)

  

有一种简单的方法可以解决此问题吗?

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

答案 15 :(得分:1)

就我而言,它是过时的节点,您需要在升级到 BigSur 后升级它 - brew upgrade node

答案 16 :(得分:1)

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

答案 17 :(得分:1)

在我们的案例中,这是一个基于Xcode 11.5构建的iOS应用程序,使用了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安装,因此Xcode会指出此差异:

enter image description here

答案 18 :(得分:0)

我遇到了应用程序崩溃问题引用了线程中的SIGABRT错误。崩溃的概述是没有加载dyld库而且找不到像这样的图像。

这是在xcode 9.3版本中看到的。我发现的原因是xcode没有动态地拾取库,因此我必须手动执行它以解决我的崩溃问题。

按照以下步骤操作: 第1步:转到构建阶段 第2步:点击&#39; +&#39;顶部的按钮,然后选择&#34;新复制文件阶段&#34; 第3步:选择目标作为框架并点击&#39; +&#39;下面的按钮添加文件。 第4步:选择下面的添加其他,单击CMD + SHIFT + G并粘贴以下路径, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

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

这些将添加到app的常规选项卡中的嵌入式二进制文件中。

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

现在运行你的应用程序。

快乐编码

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

enter image description here

  1. 选择您的项目
  2. 转到目标
  3. 转到框架、库和嵌入式内容
  4. 点击 + 图标
  5. 你应该得到一个提示 => 搜索你错过的图书馆; - 在我的例子中是 OpenSSL-。
  6. 选择并添加它。
  7. 清理您的项目。
  8. 重新构建。

答案 21 :(得分:0)

这是一个动态链接器错误,在加载或运行时链接二进制文件

[@rpath]

答案 22 :(得分:0)

尝试使用以下方法卸载python3.7.3:-

https://huybien.com/how-to-completely-uninstall-python-on-macos/

答案 23 :(得分:0)

使用asdf切换python版本后出现此错误。当您激活virtualenv时,它会感到困惑。

而是像这样重新创建virtualenv

$ rm -rf venv
$ python -m venv venv

这一次,当您激活virtualenv时,它将找到正确的python。

答案 24 :(得分:0)

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

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

  

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

在您的应用中将嵌入式内容包含Swift代码(EMBEDDED_CONTENT_CONTAINS_SWIFT)构建设置设置为YES

以下是指向它的完整Apple文档的链接here

答案 25 :(得分:0)

以上是最好的答案,首先检查

的输出是什么

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"

答案 26 :(得分:0)

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

conda install -c bioconda samtools

答案 27 :(得分:0)

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

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

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

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

  

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

答案 28 :(得分:0)

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

答案 29 :(得分:0)

Xcode 11.1和Swift 5.1

之所以会发生这种情况,是因为存在不同的,不匹配的库版本。

要做

pod update

检查所有库都包含在“构建设置”->“库和框架”列表中,并且您已选择嵌入到构建中

工作真棒

答案 30 :(得分:0)

以上都不适合我,但brew reinstall icu4c有用。

答案 31 :(得分:0)

我仅需按Command + Shift + K即可解决此问题,这使新的构建更加整洁,真的很奇怪。

答案 32 :(得分:0)

我通过重新安装Homebrew修复了此问题

卸载

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

安装

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

答案 33 :(得分:0)

也许有人需要这个:

如果使用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动态库项目目标->构建设置中将动态库安装名称库设置为 @rpath

答案 34 :(得分:0)

对于使用不同库或程序包遇到相同问题的任何人,@ 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后,它才真正起作用。

答案 35 :(得分:-1)

我忘了添加 use_frameworks!在我的 podfile 中。我把它加回来,它奏效了。

答案 36 :(得分:-1)

对于可能仍然存在此问题的任何人:

这是苹果方面的一个持续存在的问题,对我有用的是升级到ios 13.4(beta)。安装并像魅力一样工作。