【发布时间】:2012-02-12 17:12:30
【问题描述】:
TL;DR
Objective-C 应用程序与动态链接 Boost Filesystem 的静态库链接。可以使用终端从输出目录运行应用程序,但尝试从 Xcode 调试器或 Finder 运行时会出现错误 dyld: Library not loaded: libboost_filesystem.dylib <snip> Reason: image not found。
问题
在我的 Xcode 项目中,我的结构如下所示:
MainProject (Objective-C)
- static_lib_that_uses_filesystem (C++)
为了链接所有内容,我将 libboost_system 和 libboost_filesystem dylib 添加到 MainProject 中的“Link Binary with Libraries”构建阶段。
当我尝试从 Xcode 或 Finder 运行应用程序时,我得到:
sharedlibrary apply-load-rules all
warning: Unable to read symbols for libboost_filesystem.dylib (file not found).
warning: Unable to read symbols from "libboost_filesystem.dylib" (not yet mapped into memory).
warning: Unable to read symbols for libboost_system.dylib (file not found).
warning: Unable to read symbols from "libboost_system.dylib" (not yet mapped into memory).
[Switching to process 43957 thread 0x0]
dyld: Library not loaded: libboost_filesystem.dylib
Referenced from: /Users/ssteele/Library/Developer/Xcode/DerivedData/MainProject-dqrhyuarllykslftblocjdzxlran/Build/Products/Debug/MainProject.app/Contents/MacOS/MainProject
Reason: image not found
我添加了一个构建阶段以将 dylib 复制到包中的 Frameworks 目录,这没有帮助。我将其更改为将它们复制到 Executables 目录,这也没有帮助。
将它们放在可执行文件目录中确实允许我从终端运行应用程序。
从 Finder/Xcode 运行时,如何让应用找到 dylib?
背景信息
我在 Lion 上使用 Xcode 4.2,目前仅针对 Lion。我为文件系统构建了我的共享库,如下所示:
./b2 threading=multi macosx-version=10.7 --with-filesystem stage
这会在 stage/lib 目录中创建 libboost_system.dylib、libboost_filesystem.dylib 以及 .a 等效项,我直接从那里在项目中引用它们。
【问题讨论】:
-
otool -l 的输出包括:
Load command 11 cmd LC_LOAD_DYLIB cmdsize 56 name libboost_filesystem.dylib (offset 24) time stamp 2 Thu Jan 1 01:00:02 1970 current version 0.0.0 compatibility version 0.0.0 -
我想知道该名称是否应该包含某种 @ 引用,例如
@executable_path/libboost_filesystem.dylib。不过,我似乎无法做到这一点。