我的dylib中存在依赖关系问题。
我目前收到以下错误消息:
dyld: Library not loaded: /opt/local/lib/libgvc.6.dylib
Referenced from: /Users/klauskneupner/Library/Developer/Xcode/DerivedData/Visual_Thinking-bvgfcqjwnobabodenabpggrwnoet/Build/Products/Debug/Visual Thinking.app/Contents/Frameworks/libgvplugin_dot_layout.6.dylib
Reason: image not found
有趣的是,我在依赖项列表中有该库(libgvc.6)。
但在这种情况下,libgvc.6位于项目目录中,而不在/opt/local/lib
中。
我需要做什么?非常感谢提前!
答案 0 :(得分:1)
在构建时,OS X上的静态链接器ld将应用程序链接的每个库的共享库标识符写入应用程序二进制文件。在运行时,动态链接器dyld尝试从应用程序二进制文件中指定的路径加载每个共享库。您可以使用otool -L YourApp.app/Contents/MacOS/YourApp
来查看此信息。
崩溃输出中对/opt/local/lib/libgvc.6.dylib
的引用表明这是项目中libgvc.6.dylib
的共享库标识符。要以您的应用程序将使用它的方式将库包含在.app包中,而不是查看/opt/local/lib
,您需要:
更改libgvc.6.dylib
的共享库标识符,以便dyld在应用程序包中查找二进制文件。这通常通过运行install_name_tool -id @rpath/libgvc.6.dylib libgvc.6.dylib
来完成。 @rpath
占位符告诉dyld尝试替换正在加载库的二进制文件的runpath搜索路径中的每个条目。默认情况下,您的应用包Frameworks
目录位于此搜索路径上。
更新链接到libgvc.6.dylib
的所有现有预建库,以通过新名称引用它(步骤1中所做的更改仅在针对库构建新二进制文件时生效,因此它可能会生效如果仅预先构建的库链接到它,则没有必要)。您可以使用install_name_tool -change /opt/local/lib/libgvc.6.dylib @rpath/libgvc.6.dylib path/to/other.dylib
更新这些其他库。您的崩溃输出显示libgvplugin_dot_layout.6.dylib是一个需要更新的库。它可能不是唯一的一个。
确保将修改后的库复制到应用程序包中的Frameworks子目录中。这通常使用Xcode项目中的“复制文件”构建阶段来完成。