2010-03-05 78 views
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,而不必将它们复制到捆绑包中?

回答

2

为了得到这个工作,我必须将安装名称更改为@ executable_path/libName.dylib

+0

没错。如果您阅读手册页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