Xcode OSX框架链接问题

Xcode OSX框架链接问题,xcode,macos,dylib,dyld,Xcode,Macos,Dylib,Dyld,我正在为OSX 10.6开发一个私有框架,其中包括一些命令行工具和一些DYLIB。现在,dylib需要相互链接,命令行工具需要与dylib链接 命令行工具和.dylibs位于框架包中的Resources文件夹中。我已使用install\u name\u tool将所有路径更新为: @executable_path/../Frameworks/MyCompany.framework/Versions/A/Resources/lib.dylib 现在,当应用程序使用时,所有DYLIB都会正确加载,

我正在为OSX 10.6开发一个私有框架,其中包括一些命令行工具和一些DYLIB。现在,dylib需要相互链接,命令行工具需要与dylib链接

命令行工具和.dylibs位于框架包中的
Resources
文件夹中。我已使用
install\u name\u tool
将所有路径更新为:

@executable_path/../Frameworks/MyCompany.framework/Versions/A/Resources/lib.dylib
现在,当应用程序使用时,所有DYLIB都会正确加载,但当按如下方式运行时,运行时命令行工具会失败,并且
dyld:Library未加载

// dylibpath is an NSString set the the path of the Resources folder within the framework

NSTask *task = [[[NSTask alloc]init]autorelease];
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:@"DYLD_LIBRARY_PATH", dylibPath, nil]];
[task setLaunchPath:binConvert];
[task launch];
[task waitUntilExit];
现在,我来自Windows背景,如果DLL与应用程序位于同一文件夹中,加载程序会找到DLL,但显然OSX会寻找完整的路径。如何让命令行工具在同一文件夹中查找dylib

谢谢,
有两件事我想试试

选择一 使用
@rpath
可能更适合您正在尝试的操作。这里发生的是:

您的库都希望它们相对于任何可执行文件的位置相同。他们都将在:

@executable_path/../Frameworks/MyCompany.framework/Versions/A/Resources/lib.dylib
只要将所有库放在相对于可执行文件的正确位置,就可以使其正常工作。相反,您可以将dylibs上的安装名称(通过
install\u name\u tool
)设置为
@rpath/lib.dylib
。然后,这应该可以与
DYLD\u LIBRARY\u PATH
环境变量一起使用,但它确实适合与
-rpath
编译器标志一起使用,因此这可能会起作用,但我从未尝试过

选择二
您还可以创建符号链接,以便通过从可执行文件到您设置为安装名称的路径来查找库。

感谢您的输入,我认为符号链接方法将是解决此问题的方法。最后一件事我不确定-如果我正在更新链接库的路径,以使用与调用库位于同一目录中的符号链接,我应该将动态库“id”设置为什么?我仍然不确定ID的用途,我相信它是安装路径?我想我应该问的是是否有一个@blah_路径可以解析为框架根目录?我已经创建了一些符号链接,并将动态库与它们链接起来,但我仍然存在路径处于不同级别的问题,因此当动态库尝试加载另一个动态库时,路径中的“../”过多,它再次失败。您可以尝试将安装名称设置为
@rpath/libs/lib.dylib
。任何使用这些库的库/可执行文件都只需要在链接到包含所有库的目录的同一目录中创建一个符号链接。最后,我在调用可执行文件的同一路径中创建了一个指向libs文件夹的符号链接,并使用@loader_path/libs/lib.dylib处理所有内容,它可以正常工作!谢谢你的帮助!