iPhone上链接器标志force_load的xcode project- / target-settings-syntax

时间:2010-07-28 16:04:11

标签: iphone objective-c xcode linker

我遇到了双重绑定,一方面是我的iPhone应用程序使用的第三方静态库之一,必须在应用程序项目或目标设置中设置链接器标志-all_load,否则app在运行时崩溃,没有找到一些符号,从lib内部调用,另一方面另一方面为另一个第三方静态lib -all_load不能在应用程序级别上设置,或者由于“重复符号”,应用程序将无法构建 - 链接器错误。 为了解决这个问题,我现在想要使用force_load instant of load_all,因为它由于文档它的作用与all_load相同,但仅适用于传递的路径或lib文件,而不是所有的库。 force_load的问题是,我没有线索,如何通过xcode project-或target-settings传递路径或文件作为参数。我想到的所有语法可能性都会导致xcode认为它的另一个链接器标志而不是前一个的参数,或者链接器抛出与语法相关的错误,或者与未设置相比,标志根本不执行任何操作。 我还在文本编辑器中打开.pbxproj文件,手动将其编辑为正确的命令行语法,但是当使用xcode重新加载项目时,它会自动更改语法,将force_load解释为单独的标志。

有人对这个问题有所了解吗?

THX, Kaiserludi。

2 个答案:

答案 0 :(得分:18)

我刚试过这个。我编译了一个静态armv6,armv7和i386胖二进制PCRE,用于我的iPhone项目。我的项目通常只是将我的库添加到项目中并且链接正常。所以我取消选中libpcre.a的目标成员资格框并重建。正如所料,我为pcre符号得到了一堆丢失的符号链接器错误。然后我打开了目标设置窗口并编辑了“其他链接器标志”部分。我补充说:

-force_load lib/pcre/libpcre.a

lib目录与我的project.xcodeproj文件位于同一目录中。

它链接正常所以我知道force_load命令工作(我可以看到它在xcode构建文件时添加到构建标志中)。

希望有所帮助。

更新

我还尝试将系统库添加到“Other Linker Flags”行,如下所示:

-force_load src/pcre/libpcre.a -force_load ${SDKROOT}/usr/lib/libz.dylib

这也有效。

答案 1 :(得分:1)

我刚刚将force_load添加到我们的项目中,所有这些都可以使用最简单的语法。该库是在同一项目中构建的依赖项。因此,库在链接命令行中包含两次:一次作为普通输入文件,一次作为-force_load的参数。您可能希望在参数周围添加引号字符。

事实上,我甚至使用与配置相关的设置(因为调试与发布和设备与模拟器的路径明显不同)。

祝你好运。