【问题标题】:Setting Xcode linker up correctly: library not found, but in "Link Binary With Libraries" list正确设置 Xcode 链接器:未找到库,但在“Link Binary With Libraries”列表中
【发布时间】:2017-03-27 19:17:23
【问题描述】:

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

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

【问题讨论】:

    标签: xcode linker mach-o


    【解决方案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,您需要:

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

    2. 更新链接到 libgvc.6.dylib 的任何现有预构建库,以通过新名称引用它(步骤 1 中所做的更改仅在针对库构建新二进制文件时生效,因此可能不会如果它是 only 链接到它的预构建库,则有必要)。您可以使用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 项目中的 Copy Files 构建阶段来完成。

    【讨论】:

    • 干得好。谢谢。
    猜你喜欢
    • 2013-06-17
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2015-12-04
    • 1970-01-01
    • 2021-04-03
    • 2015-08-19
    相关资源
    最近更新 更多