我面临双重困境。一方面,对于我的 iPhone 应用程序使用的第 3 方静态库之一,必须在应用程序项目或目标设置中设置链接器标志 -all_load
。否则,应用程序会在运行时崩溃,找不到从 lib 内部调用的某些符号。另一方面,对于另一个第 3 方静态库,-all_load
不得在应用程序级别设置,否则由于“重复符号”链接器错误,应用程序将无法构建。
为了解决这个问题,我现在想使用 force_load
而不是 load_all
,因为根据文档,它的作用与 all_load
相同,但仅适用于传递的路径或库文件,而不是所有库。
force_load
的问题是,当通过 XCode 项目或目标设置传递路径或文件时,我不知道如何传递路径或文件作为参数。我尝试过的所有语法可能性要么导致 xcode 认为它是另一个链接器标志而不是前一个链接器的参数,要么链接器抛出与语法相关的错误,要么该标志根本不执行任何操作。
我还在文本编辑器中打开了 .pbxproj 文件,手动将其编辑为正确的命令行语法。但是当使用 XCode 重新加载项目时,它会自动将语法更改为将参数解释为 force_load
作为单独的标志。
有人对这个问题有想法吗?
最佳答案
我刚刚试过了。我编译了 PCRE 的静态 armv6、armv7 和 i386 fat 二进制文件用于我的 iPhone 项目。我的项目通常只是将我的库添加到项目中并且链接正常。所以我取消选中 libpcre.a 的目标成员资格框并重建。正如预期的那样,我得到了一堆 pcre 符号的缺失符号链接(symbolic link)器错误。然后我打开目标设置窗口并编辑“其他链接器标志”部分。我补充说:
-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
这也行。
关于iphone - iPhone 上链接器标志 force_load 的 xcode project-/target-settings-syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354864/