尝试运行我在 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 库。
有没有简单的方法来解决这个问题?
查找所有 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 上公开了这个脚本。
这对我有用:
brew upgrade node
node
。可能另一个安装破坏了节点路径。也为我工作。
brew upgrade node
修复了它(OSX Catalina)
在目标的 General
标签中,有一个名为 Frameworks, Libraries, and Embedded Content
的部分
单击 +
符号,添加必需的 framework
,崩溃就解决了。
https://i.stack.imgur.com/bbMdY.png
LC_ID_DYLIB
,我不需要在 usr/loca/opt 中创建一个符号链接!有什么办法可以弄清楚吗? :|很痛苦:(
Embed & Sign
将 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
node --version
导致了同样的错误。运行以上两个命令解决了我的问题。
brew cleanup
命令,如果您想摆脱旧版本,有时这样做是件好事。
brew cleanup
然后它修复了。
对于某些人来说,这可能就像为动态库设置系统路径一样简单。在 OS X 上,这就像设置 DYLD_LIBRARY_PATH
环境变量一样简单。看:
DYLD_LIBRARY_PATH
设置为什么值?
DYLD_LIBRARY_PATH
。正确的解决方案是在 .app
中包含非标准库,用户无需执行任何操作。但是,开发人员可能仍然需要按照我的回答破解加载程序路径。
这应该可以解决问题
brew update
brew upgrade
brew cleanup
ImportError: cannot import name 'ssl' from 'urllib3.util.ssl_' (/Users/foo/.local/share/virtualenvs/TMIWqqTS/lib/python3.7/site-packages/urllib3/util/ssl_.py)
asdf uninstall python 3.7.3
(我使用的是 3.7.3,在此处指定您拥有的版本),然后运行 asdf install python 3.7.3
。
当我尝试使用 rvm 安装 ruby 2.3.1 时出现此错误。它首先告诉我运行 brew update
,我这样做了,然后当我尝试运行 rvm install ruby-2.3.1
时,我收到了这个 SO question 中的错误。
解决方法是首先运行 brew upgrade
,显然根据这个 superuser.com 问题,您需要同时执行 brew update
&& brew upgrade
。完成后,我终于可以安装 ruby 2.3.1。
brew upgrade
。这可能对一个人的整个系统造成巨大的破坏。相反,隔离需要升级的内容并仅升级。
现在 Xcode 已经升级了他们的 IDE,他们稍微改变了它的功能。
它曾经被分成单独的部分,如上所示,“嵌入式二进制文件”和“链接框架和库”作为单独的部分。
现在,它是一个组合部分,右侧有关于应该嵌入什么的下拉菜单。
https://i.stack.imgur.com/DoikR.png
起初这让我感到困惑,但现在完全有道理。
如果您使用的是 Xcode 11 及更高版本:
转到 General
选项卡并在 Frameworks, Libraries, and Embedded Content
部分添加框架。
重要提示:默认情况下,它可能会标记为 Do Not Embed
,将其更改为 Embed Without Signing
,如图所示,一切顺利。
https://i.stack.imgur.com/TM4Hp.jpg
对于 11 以下的 Xcode 版本:
只需在 Embedded Binaries
部分添加框架即可。
干杯!
要解决我的 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
您可以对可执行文件使用带有 -L 选项的 otool 命令,这将显示可执行文件期望这些库位于的位置。
如果需要更改这些路径的路径,请使用 install_name_tool 命令,该命令允许您设置库的路径。
使构建阶段中的框架可选对我有用。
在 Xcode -> Target -> Build Phases -> Link Binary with Libraries -> 确保新添加的框架(如果有)标记为可选
我来到这里试图运行我刚刚使用 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)
我通过 brew install libpng
修复它
如果您使用 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
我通过使用 Product > Clean Build Folder
(CommandShiftK) 解决了这个问题,这使得新的干净构建非常奇怪。
对于我的框架,我使用的是作为 git 子模块添加的 Xcode 子项目。
我相信我遇到了这个错误,因为我使用与我的主应用程序不同的签名团队签署了框架。 (为应用切换团队;忘记切换框架)
解决方案是不在框架项目内签名。相反,在主应用程序的 Target > General > Frameworks, Libraries, and Embedded Content
部分,通过 Embed & Sign
对框架进行签名。
如果我选择 Do not Embed
或 Embed Without Signing
,则会收到错误消息:
FRAMEWORK 在使用库验证的过程中无效:映射文件没有 cdhash,完全未签名?代码必须至少是临时签名的。
您可以使用 sudo install_name_tool -change
更改 dylib 路径和 sudo install_name_tool -id
更改 dylib 名称
如果您使用 virtualenv,只需删除您的环境文件夹并使用此命令重新创建它 virtualenv --python=/usr/local/bin/python3 the_name_of_my_env
Xcode 11.1 & 斯威夫特 5.1
快速解决
首先确保在常规选项卡,嵌入二进制文件中选择了外部添加的库有选项嵌入。
如果还是不行。。
发生这种情况是因为您存在不同的、不匹配的库版本。
更新 Pod
pod update
重要提示:检查所有库是否包含在构建设置 -> 库和框架列表中,并且您已提供嵌入构建的选项
工作真棒
在我们的例子中,它是一个 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 会指出这个差异:
https://i.stack.imgur.com/664KM.png
对于任何访问此页面的人,因为他们在尝试使用 Xcode 6.3.1 将第三方框架链接到他们的项目时遇到此错误,我遇到的问题是因为该库是使用旧版本的编译器使用不同版本创建的迅速的。对我来说解决这个问题的唯一方法是重新构建框架。
Apple 技术文档中说明了您可能会遇到此问题的另一个原因。
如果您正在构建的应用程序不使用 Swift 但嵌入了框架等内容,那么 Xcode 将不会在您的应用程序中包含这些库。因此,您的应用程序将在启动时崩溃,并显示如下错误消息:
在您的应用中将 Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) 构建设置设置为 YES
这是完整的 Apple 文档的链接,对其进行了解释here
对于使用不同库或包遇到相同问题的任何人,@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
之后它才真正起作用。
有没有简单的方法来解决这个问题?
我刚刚使用了 brew upgrade <the tool>
。就我而言,brew upgrade tmux
。
在我的情况下,它是过时的节点,您需要在升级到 BigSur 后升级它 - brew upgrade node
如https://gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded中所述,您可以尝试
brew uninstall --ignore-dependencies node icu4c
brew install node
brew link --overwrite node
快速解决
通过在您的 Podfile 中注释它来删除 pod(其名称在错误中),例如 #Podname
运行 pod 安装
取消注释您之前评论过的 pod
再次运行 pod install。
它对我有用,并且很容易分享它。
我遇到了在线程中引用 SIGABRT 错误的应用程序崩溃问题。崩溃的概述是未加载 dyld 库并且未找到类似的图像。
这在 Xcode 9.3 中可以看到。我发现的原因是 Xcode 没有动态地获取库,所以我不得不手动完成它,这解决了我的崩溃问题。
请按照以下步骤操作:
转到构建阶段点击顶部的“+”按钮并选择“新建复制文件阶段”选择目标作为框架并点击下面的“+”按钮添加文件。选择下方添加其他,点击 CMD+SHIFT+G 并粘贴以下路径,/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
现在您将能够看到一些 swift dylib,选择所有扩展名为 .dylib 的 swift 库,然后单击打开。
这些将被添加到应用程序的常规选项卡中的嵌入式二进制文件中。
在项目文件夹中创建一个新组并添加所有这些库。
现在运行您的应用程序。
如果您在终端中使用 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"
DYLD_LIBRARY_PATH
来修改搜索路径。另一个答案得到了这个。exefile
代表您尝试运行的可执行文件。就我而言,otool -L /usr/local/bin/php
成功了。