尝试运行我在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库:
$ 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上公开了这个脚本。
对于任何人来到这个页面,因为他们试图使用Xcode 6.3.1将第三方框架链接到他们的项目时遇到此错误,我遇到的问题是因为使用不同版本的旧版本编译器创建了库快速的。解决这个问题的唯一方法是重新构建框架。
您可能会得到这个的另一个原因在Apple技术文档中说明..
如果您正在构建一个不使用Swift但嵌入内容的应用程序,那么Xcode将不会在您的应用程序中包含这些库。因此,您的应用会在启动时崩溃,并显示如下错误消息:
在您的应用中将嵌入式内容包含Swift代码(EMBEDDED_CONTENT_CONTAINS_SWIFT)构建设置设置为YES
以下是完整Apple文档的链接,它解释了here
你可以使用sudo install_name_tool -change
更改dylib路径和sudo install_name_tool -id
更改dylib名称
对于使用不同库或包进行相同操作的任何人,@ 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 update
和brew upgrade
,但只有在我手动安装openldap
之后才真正起作用。
我遇到了在线程中引用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的常规选项卡中的嵌入式二进制文件中。
在项目文件夹中创建一个新组并添加所有这些库。
现在运行你的应用程序
快乐的编码
也许有人需要这个:
如果您使用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
我通过重新安装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)"
我通过简单地按下Command + Shift + K来解决这个问题,这使得一个新的干净构建,真的很奇怪。
这对我有用:
brew upgrade node
对于某些人来说,这可以像为动态库设置系统路径一样简单。在OS X上,这就像设置DYLD_LIBRARY_PATH
环境变量一样简单。看到:
将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
当我尝试使用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。
您可以将otool命令与-L选项一起用于可执行文件,该命令将显示可执行文件期望这些库的位置。
如果需要更改的路径,请使用install_name_tool命令,该命令允许您设置库的路径。
我来到这里试图运行我刚刚使用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
修复它