384

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

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

4

38 回答 38

208

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

于 2013-07-17T15:40:50.603 回答
152

这对我有用:

brew upgrade node
于 2018-05-09T20:14:21.980 回答
122

在目标的General选项卡中,有一个部分称为Frameworks, Libraries, and Embedded Content

单击该+标志,添加必需项framework,崩溃已解决。

更新最新的 xcode 屏幕截图

于 2016-05-10T07:22:30.000 回答
110

将 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
于 2019-01-07T10:39:32.873 回答
43

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

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

于 2016-01-27T01:04:55.117 回答
38

这应该可以解决问题

brew update
brew upgrade
brew cleanup
于 2020-06-20T08:39:43.510 回答
12

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

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

于 2016-10-21T11:41:52.193 回答
11

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

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

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

新的 IDE 更改

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

于 2019-09-30T14:04:14.820 回答
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

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

brew switch openssl 1.0.2s
于 2020-05-25T21:35:23.000 回答
10

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

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

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

在此处输入图像描述

对于 11 以下的 Xcode 版本:

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

干杯!

于 2019-11-30T18:48:35.747 回答
8

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

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

于 2013-07-17T15:26:08.430 回答
6

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

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

于 2020-08-28T01:50:52.723 回答
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)
于 2015-06-30T02:35:46.217 回答
3

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

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

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

如果我选择Do not Embed或者Embed Without Signing我得到错误:

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

于 2019-12-18T09:48:18.137 回答
3

我修复它brew install libpng

于 2018-03-16T05:49:29.053 回答
3

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

于 2019-03-21T05:27:31.673 回答
3

如果您使用 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

于 2019-02-27T06:48:40.507 回答
2

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

于 2019-11-26T16:50:37.543 回答
2

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

于 2016-12-12T06:39:32.483 回答
2

在我们的例子中,它是一个 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 会指出这个差异:

在此处输入图像描述

于 2020-07-06T21:04:34.747 回答
2

Xcode 11.1 & 斯威夫特 5.1

快速解决

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

如果还是不行。。

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

更新 Pod

pod update

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

工作真棒

于 2019-10-10T09:06:55.507 回答
1

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

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

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

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

这是完整 Apple 文档的链接,在此处进行了解释

于 2015-04-28T01:22:25.040 回答
1

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

brew uninstall --ignore-dependencies node icu4c
brew install node
brew link --overwrite node
于 2021-04-14T11:29:28.557 回答
1

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

于 2020-12-23T11:04:53.307 回答
1

快速解决

  • 通过在您的 Podfile 中注释它来删除 pod(其名称在错误中),例如 #Podname
  • pod install
  • 取消注释您之前评论过的 pod
  • 再跑pod install

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

于 2021-11-03T15:46:56.083 回答
0

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

我刚用过brew upgrade <the tool>。就我而言,brew upgrade tmux.

于 2019-09-19T10:18:00.190 回答
0

在此处输入图像描述

  1. 选择您的项目
  2. 前往目标
  3. 转到框架、库和嵌入式内容
  4. 点击 + 图标
  5. 你应该得到一个提示 => 搜索你错过的图书馆;-在我的例子中是 OpenSSL-。
  6. 选择它并添加它。
  7. 清理你的项目。
  8. 重建。
于 2021-04-10T10:28:18.890 回答
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后它才真正起作用。

于 2018-11-25T06:42:27.137 回答
0

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

而是像这样重新创建 virtualenv

$ rm -rf venv
$ python -m venv venv

这次当你激活 virtualenv 时,它会找到正确的 python。

于 2020-07-23T16:55:00.930 回答
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"
于 2020-05-17T09:29:37.513 回答
0

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

conda install -c bioconda samtools

于 2020-04-22T11:05:52.510 回答
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

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

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

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

现在运行您的应用程序。

于 2018-05-18T07:24:56.120 回答
0

固定:这种方法很容易为我解决了这个问题......

我触发相同问题的特定 CLI 工具(即 netdiscover)正在寻找:

/usr/local/opt/libnet/lib/libnet.1.dylib _

当我在该路径中搜索libnet.1.dylib时,ls返回了一个文件,但版本较新:libnet.9.dylib

按照本文中介绍的方法,如何在 MacOS 上修复“Dyld: Library not Loaded”错误,我可以通过简单地创建一个指向该工具正在寻找的文件的符号链接指针(即libnet.1 .dylib),到我系统上列出的新文件版本(即libnet.9.dylib),...

ln -s /usr/local/opt/libnet/lib/libnet.9.dylib /usr/local/opt/libnet/lib/libnet.1.dylib

...现在,当我运行该工具时,它会毫无怨言地找到所需的依赖项!,:)

--AA

参考:

于 2021-10-26T19:33:10.003 回答
0

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

[@rpath]

于 2021-04-06T14:43:34.673 回答
-1

我忘了添加 use_frameworks!在我的播客文件中。我把它加回去了,它起作用了。

于 2021-04-28T08:44:48.013 回答
-1

对于可能仍然遇到此问题的任何人:

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

于 2020-02-28T18:40:17.997 回答
-1

我通过重新安装 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)"

于 2019-03-14T15:02:34.137 回答
-2

以上都没有为我工作,但brew reinstall icu4c确实如此。

于 2019-09-25T07:59:02.517 回答