我有一个Cocoa应用程序作为XCode项目,它具有几个作为dylib目标的补充功能。
当XCode构建项目时,它将所有构建输出放在一个文件夹中:.app包和dylib文件。当从XCode调试器执行时,.app启动。
但我无法从finder启动应用程序。
如何设置XCode以在独立状态下“部署”应用程序?我发现我可以在实际应用二进制文件上使用ld
来包含dylib的相对路径:@executable_path/../../mylib.dylib
在每次构建之后运行脚本似乎是错误的:必须有某种方式(我完全缺少)从XCode内部轻松完成这一点 - 它肯定是一个常见的问题吗?
看起来XCode支持在目标信息中使用@executable_path,@ download_path和@rpath>构建>链接>动态库安装名称设置(LD_DYLIB_INSTALL_NAME)设置。
帮助文本说:“在动态库中设置内部”安装路径“(LC_ID_DYLIB)。链接到库的任何客户端都将记录该路径,因为dyld应该找到该库的方式”
这看起来很有希望,但如果我需要将多个路径中的dylib链接到一个公共库,则可用性是一个问题 - 每次相对路径都会不同。
从finder运行我的testapp,我得到以下(相关)错误文本
Dyld Error Message:
Library not loaded: @executable_path/../../util.dylib
Referenced from: /Volumes/data/Code/TestApp/build/Debug/TestApp.app/Contents/MacOS/TestApp
Reason: image not found
util.dylib在/ Volumes / data / Code / TestApp / build / Debug /所以我很困惑:/
答案 0 :(得分:2)
在构建应用程序时,您应该使用“复制文件”构建阶段将dylib复制到应用程序的包中。您需要将其复制到Frameworks。然后,您可以将安装路径设置为@executable_path/../Frameworks/mylib.dylib
。