1
我的.app包看起来是这样的:包和dylib查找
MyApp.app/
Contents/
MacOS/
MyApp
libA.dylib
libB.dylib
libC.dylib
PlugIns/
PlugIn1.bundle/
...bundle contents
PlugIn2.bundle/
...bundle contents
两个PlugIn1.bundle和PlugIn2.bundle是针对libA.dylib,libB.dylib和libC.dylib联系。三个dylib具有@ loader_path/libName.dylib的安装名称。然而,捆绑包找不到libA.dylib,libB.dylib或libC.dylib。我已经尝试设置-bundle_loader标志来链接主要的可执行文件,但这没有帮助。捆绑包是否可以从.app包的MacOS文件夹查找dylib,而不必将它们复制到捆绑包中?
没错。如果您阅读手册页dyld(1),它应该解释为什么:loader_path是包含加载命令(PlugIn1)的二进制文件的路径; executable_path是进程的主要可执行文件(MyApp)的路径。在大多数情况下,很明显哪一个是合适的 - loader_path /../../../ MacOS/libName.dylib比executable_path/libName.dylib复杂得多。 (当没有一个看起来很简单时,请查看-rpath。)(对不起,忽略了符号,但我不知道如何在评论中逃避它们) – abarnert 2012-04-30 18:03:33