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

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


您可以对可执行文件使用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_dylib .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选项卡中,有一个称为框架、库和嵌入式内容的部分

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


当我试图使用rvm安装ruby 2.3.1时,我得到了这个错误。它首先告诉我运行brew update,我这样做了,然后当我尝试运行rvm install ruby-2.3.1时,我在这个SO问题中收到了错误。

解决办法是首先运行brew升级,显然根据这个superuser.com的问题,你需要同时进行brew更新&& brew升级。完成这些之后,我终于可以安装ruby 2.3.1了。


可以使用sudo install_name_tool -change change dylib路径 和 Sudo install_name_tool -id change dylib名称


我通过brew install libpng修复了它


这招对我很管用:

brew upgrade node

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

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

请遵循以下步骤:

进入构建阶段 点击顶部的“+”按钮并选择“新建复制文件阶段” 选择目标为框架,点击下面的“+”按钮添加文件。 选择下面添加其他,点击CMD+SHIFT+G,粘贴下面的路径, /应用程序/ xcode /内容/开发/工具链/ XcodeDefault.xctoolchain / usr / lib /快速/ 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 update和brew 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动态库项目Target -> Build Setting中将动态库安装名库设置为@rpath


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

卸载

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

安装

ruby / usr / bin / e,“美元(卷毛-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”


我通过使用产品>清洁构建文件夹(CommandShiftK)修复了这个问题,这使得一个新的清洁构建,真的很奇怪。


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

我只是使用brew upgrade <工具>。在我的例子中,酿造upgrade tmux。


以上这些对我都不起作用,但是brew重新安装icu4c起作用了。


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

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

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

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


Xcode 11.1 & Swift 5.1

快速修复

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

如果还是不行…

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

更新Pods

pod update

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

工作非常棒


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


如果你使用Xcode 11以后:

进入“常规”选项卡,在“框架”、“库”和“嵌入式内容”部分中添加框架。

重要提示:默认情况下,它可能被标记为不嵌入,将其更改为嵌入而不签名,如图所示,你就可以开始了。

对于低于11的Xcode版本:

只需在嵌入式二进制文件部分中添加框架,就完成了。

干杯!


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

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

解决方案是不在框架项目内签名。相反,在主应用程序的目标>通用>框架,库和嵌入式内容部分,通过Embed & sign对框架进行签名。

如果我选择不嵌入或嵌入没有签名,我反而得到错误:

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


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

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


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

第二个install -c bioconda samtools


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

otool -L

如果不正确,就按下面的步骤做

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

And

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会指出这个差异:


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

相反,像这样重新创建virtualenv

$ rm -rf venv
$ python -m venv venv

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


让构建阶段的框架成为可选框架对我来说很有用。

在Xcode ->目标->构建阶段->链接二进制与库-> 确保新添加的框架(如果有的话)被标记为可选


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


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

[@rpath]


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


如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的时候。Dylib, ls返回一个文件,但是是一个较新的版本:libnet.9.dylib

遵循本文中提出的方法,如何修复' Dyld:库未加载'在MacOS上的错误,我能够通过简单地创建一个符号链接指针,指向该工具正在寻找的文件(即,libnet.1.dylib),到我的系统上列出的新文件版本(即,libnet.9.dylib),…

在s /usr/地方/opt/李勃/李勃。9dylib / usr / local / opt / libnet / lib / libnet。1 . dylib

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

--AA

参考:


快速修复

删除pod(其名称在错误中)通过在Podfile中注释它,如#Podname 运行pod安装 取消注释之前注释过的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日志一样非常有用))


Install_name_tool -add_rpath new_path可执行文件 Install_name_tool -delete_rpath old_path可执行文件