当我试图在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库(其中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上公开了这个脚本。
我面临的应用程序崩溃的问题引用SIGABRT错误在线程。崩溃的概述是没有加载dyld库和图像没有找到类似的东西。
这是在Xcode 9.3中看到的。我发现的原因是Xcode没有动态地拾取库,所以我必须手动这样做,这解决了我的崩溃问题。
请遵循以下步骤:
进入构建阶段
点击顶部的“+”按钮并选择“新建复制文件阶段”
选择目标为框架,点击下面的“+”按钮添加文件。
选择下面添加其他,点击CMD+SHIFT+G,粘贴下面的路径,
/应用程序/ xcode /内容/开发/工具链/ XcodeDefault.xctoolchain / usr / lib /快速/ iphoneos
现在你将能够看到一些swift dylib,选择所有扩展名为.dylib的swift库,然后点击打开。
这些将被添加到app的general选项卡的嵌入式二进制文件中。
在project文件夹中创建一个新组,并添加所有这些库。
现在运行你的应用程序。
修正:这种方法清除了这为我轻松…
我的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
参考:
这是我提出这个问题的理由:
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日志一样非常有用))