正确设置 Xcode 链接器:找不到库,但在 "Link Binary With Libraries" 列表中

Setting Xcode linker up correctly: library not found, but in "Link Binary With Libraries" list

我的 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 中。

我需要做什么?非常感谢!

在构建时,linkX 上的静态 linker,ld,将应用程序 link 反对的每个库的共享库标识符写入应用程序二进制文件。在 运行 时间,动态 linker,dyld,尝试从应用程序二进制文件中指定的路径加载每个共享库。您可以使用 otool -L YourApp.app/Contents/MacOS/YourApp.

查看此信息

崩溃输出中对 /opt/local/lib/libgvc.6.dylib 的引用表明它是项目中 libgvc.6.dylib 的共享库标识符。要以您的应用程序将使用它而不是查找 /opt/local/lib 的方式将库包含在您的 .app 包中,您需要:

  1. 更改 libgvc.6.dylib 的共享库标识符,以便 dyld 将在您的应用程序包中查找二进制文件。这通常由 运行ning install_name_tool -id @rpath/libgvc.6.dylib libgvc.6.dylib 完成。 @rpath 占位符告诉 dyld 尝试替换正在加载库的二进制文件的 运行path 搜索路径中的每个条目。默认情况下,您的应用程序包的 Frameworks 目录在此搜索路径上。

  2. 将 link 的任何现有预构建库更新为 libgvc.6.dylib 以通过新名称引用它(步骤 1 中所做的更改仅在新二进制文件针对库构建,因此如果 预构建库 link 则可能没有必要)。您可以使用 install_name_tool -change /opt/local/lib/libgvc.6.dylib @rpath/libgvc.6.dylib path/to/other.dylib 更新这些其他库。您的崩溃输出显示 libgvplugin_dot_layout.6.dylib 就是这样一个需要更新的库。它可能不是唯一的。

  3. 确保将修改后的库复制到应用程序包中的 Frameworks 子目录中。这通常是在您的 Xcode 项目中使用复制文件构建阶段完成的。