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

问题描述 投票:175回答:16

尝试运行我在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'一样,它不再关心它了。不幸的是,它抱怨它无法找到下一个升级库。

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

macos dylib dyld otool install-name-tool
16个回答
135
投票

找到所有的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)

并为每个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
投票

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

您可能会得到这个的另一个原因在Apple技术文档中说明..

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

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

以下是完整Apple文档的链接,它解释了here


1
投票

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


1
投票

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

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

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


0
投票

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

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

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

现在您将能够看到一些快速的dylib,选择所有带有.dylib扩展名的swift库并单击open。

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

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

现在运行你的应用程序

快乐的编码


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动态库项目中Target - > Build Setting set动态库将Name Base安装到@rpath


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


0
投票

我通过简单地按下Command + Shift + K来解决这个问题,这使得一个新的干净构建,真的很奇怪。


80
投票

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

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

enter image description here

点击+标志并添加framework


55
投票

这对我有用:

brew upgrade node

29
投票

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


15
投票

将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

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。


5
投票

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

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


5
投票

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

2
投票

我通过brew install libpng修复它

© www.soinside.com 2019 - 2024. All rights reserved.