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

标签 iphone objective-c xcode linker

我面临双重困境。一方面,对于我的 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/

相关文章:

iphone - 在 iPhone 中将时间转换为日期时间格式

iphone - 我们可以使用 Objective C 创建一个 Web 服务吗

iphone - iOS 4 中的实时相机数据访问

objective-c - 如何在 Box2d 中将多个凸多边形设置为一个形状?

iOS、Swift、Objective C、UserNotificationCenter、NSNotificationCenter

macos - iPhone SDK 上的 SOAP 请求

ios - xcode swift UICollectionView 布局 - 单元格大小调整

ios - 在 Xcode 中对不同的目标使用相同的代码

ios - 未找到框架 MicrosoftBandKit_iOS

objective-c - 模态视图 Controller 中的后退按钮