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 '在那里,它不再介意了。不幸的是,它会抱怨找不到下一个增强库。

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

448432 次浏览

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

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

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

Manpages: otool install_name_tool

以前我写了一个python脚本(copy_dylibs.py),在构建应用程序时自动解决所有这些问题。它会将/usr/local/opt/local中的所有库打包到应用程序包中,并修复对这些库的引用,以使用@rpath。这意味着您可以轻松地使用Homebrew安装第三方库并轻松地打包它们。

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

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

你可能会得到这个的另一个原因是在苹果的技术文档中。

如果你正在构建一个不使用Swift的应用程序,但嵌入了框架之类的内容,Xcode将不包括这些库在你的应用程序中。因此,你的应用程序将在启动时崩溃,并出现如下错误消息:

将嵌入式内容包含Swift代码(EMBEDDED_CONTENT_CONTAINS_SWIFT)构建设置设置为YES

这里是完整的苹果文档的链接,解释它在这里

我在这里试图运行一个我刚刚用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)

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

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

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

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

Update latest xcode screen-shot

当我试图使用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了。

你可以使用sudo install_name_tool -change改变dylib路径 和 sudo install_name_tool -id change dylib name

我通过brew install libpng来修复它

这招对我很管用:

brew upgrade node

我面临的应用程序崩溃的问题引用SIGABRT错误在线程。崩溃的概述是没有加载dyld库和图像没有找到类似的东西。

这是在Xcode 9.3中看到的。我发现的原因是Xcode没有动态地拾取库,所以我必须手动这样做,这解决了我的崩溃问题。

请遵循以下步骤:

  1. 进入构建阶段
  2. 点击顶部的“+”按钮并选择“新建复制文件阶段”
  3. 选择目标为框架,点击下面的“+”按钮添加文件。
  4. 选择下面的Add Other at,点击CMD+SHIFT+G,粘贴下面的路径, 李/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos < / >

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

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

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

现在运行你的应用程序。

对于使用不同的库或包遇到相同问题的人来说,@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之后,它才真正工作。

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

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

我通过重新安装Homebrew解决了这个问题

卸载

ruby -e "$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" < /代码> < / p >

安装

/usr/bin/ruby -e "$(curl - ssl https://raw.githubusercontent.com/Homebrew/install/master/install)" < /代码> < / p >

我通过使用Product > Clean Build Folder (命令转变K)修复了这个问题,这使得一个新的干净的构建,真的很奇怪。

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

我只是使用了brew upgrade <the tool>。在我的情况下,brew upgrade tmux

上面没有一个对我有用,但是brew reinstall icu4c有用。

现在Xcode升级了他们的IDE,他们改变了一些功能。

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

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

New IDE Changes .

一开始我很困惑,但现在完全说得通了。

Xcode 11.1 &斯威夫特5.1

快速修复

首先确保外部添加的库有选项embed被选择在General Tab, embdbaries .

如果还是不行…

出现这种情况是因为存在不同的、不匹配的库版本。

更新Pods

pod update

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

工作非常棒

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

如果你使用Xcode 11以后:

进入General选项卡,在Frameworks, Libraries, and Embedded Content部分添加框架。

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

enter image description here

对于低于11的Xcode版本:

只要在Embedded Binaries部分中添加框架就完成了。

干杯!

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

我相信我得到这个错误是因为我用不同签约团队而不是我的主应用程序来签署框架。忘记切换到框架)

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

如果我选择Do not EmbedEmbed Without Signing,我会得到错误:

框架在使用库验证的进程中无效:映射文件没有cdhash,完全unsigned?代码至少要有特别签名。

对于那些仍然有这个问题的人:

这是苹果方面一直存在的问题,对我来说有效的方法是升级到ios 13.4(测试版)。装好后效果很好。

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

Conda install -c bioconda samtools

最好的一个是上面回答的,首先检查输出是什么

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"

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

这应该可以解决问题

brew update
brew upgrade
brew cleanup

在我们的例子中,它是一个基于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

我在使用asdf切换python版本后得到了这个错误。当你激活virtualenv时,它会感到困惑。

相反,像这样重新创建virtualenv

$ rm -rf venv
$ python -m venv venv

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

在构建阶段制作框架可选对我有用。

在Xcode ->目标→构建阶段->用库链接二进制文件> 确保新添加的框架(如果有)被标记为Optional

在我的情况下,这是节点是过时的,你需要升级后,去BigSur - brew升级节点

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

< a href = " https://stackoverflow.com/a/59216681/4770877 " > [@rpath] < / >

enter image description here

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

正如https://gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded中所说,你可以试试

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

我忘记添加use_frameworks了!在我的播客里。我把它加回来,它起作用了。

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

我的CLI工具触发了同样的问题(即netdiscover),正在寻找:

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

当我搜索该路径时,libnet.1.dylibls返回一个文件,但是一个更新的版本:libnet.9.dylib

遵循本文中给出的方法如何修复MacOS上的“Dyld:库未加载”错误,我能够通过简单地创建一个符号链接指针来修复这个问题,该符号链接指针指向工具正在寻找的文件(即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

参考:

快速修复

  • 删除pod(其名称在错误中)通过在Podfile中注释它,如#Podname
  • 运行pod install
  • 取消注释之前注释过的pod
  • 再次运行pod install

这对我来说很有效,所以分享它很容易。

这是我提出这个问题的理由:

dyld: Library not loaded: /System/Library/Frameworks/AVFAudio.framework/AVFAudio   Referenced from: /private/var/containers/Bundle/Application/B6724E76-E704-46A2-8637-F43277018CE2/MyFrameworkUsageSample.app/Frameworks/MyFramework.framework/MyFramework Reason: image not found dyld: launch, loading dependent libraries DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

我在创建自己的框架MyFramework——其中使用了Apple框架。并使用最新的部署目标(iOS 16)构建xcframework。而在TestApp中需要在iOS 13+上运行。测试设备使用的是iOS 15。

因此,带有MyFramework的TestApp在模拟器(iOS16)上成功启动。但不是在设备上。

解决方案:在MyFramework中-将部署目标更改为所需的iOS。并重新生成框架。或者,如果您使用的是第三方框架,请供应商支持您的最小部署目标。

所以错过了在构建之前更改xcframework中的最小部署目标-和Apple日志一样非常有用))