ios - 强制静态库不使用 -ObjC of -all_load 标志?

标签 ios objective-c linker static-libraries clang

我们知道我们可以强制静态库在链接期间加载所有目标文件。这用于不同的目的,例如将 objective-c 类别包含到静态库中等。

我的问题是,当项目使用 -ObjC 或 -all_load 标志时,是否可以强制库不加载所有目标文件?

我正在使用一些 clang 功能(特别是 __has_include 指令)来控制某些 header 的导入,但是当使用 -Objcflags时,该指令无效,所有目标文件都已加载,所以我的库没有正常工作。

有什么方法可以解决或解决这个问题吗?

问候,

最佳答案

Is there any way to solve or workaround this problem?

是的,但它是一个脆弱且容易出错的点,可能不值得。重构代码以不需要静态库 {y,ies} 的部分链接可能会更容易。

如果您对需要加载的每个符号都有硬引用,则链接器将解析该符号并将其链接到最终的可执行文件中。

但是,由于这根本不是受支持或推荐的模式,因此可能无法直接引用代码中的某些符号。同样,似乎没有代表整个类别的符号。您可能必须单独引用类别中包含的所有方法。

查看nm命令行工具; nm -m library 将转储库中包含的所有符号信息。

关于ios - 强制静态库不使用 -ObjC of -all_load 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661866/

相关文章:

ios - 当我在 CollectionView 中向下滚动时图片消失

ios - 配置文件与默认钥匙串(keychain)中的任何有效证书/私钥对都不匹配

ios - IOS7和 "Terminated due to Memory Pressure"中的内存管理

c++ - 链接静态库

c++ - 如何创建可以独立于其依赖项使用的 C++ 库?

linux - 如何将 "-lespeak"添加到代码块?

ios - Swift 中带有核心动画的动画 UILabel 元素

ios - 触发 iPhone/iPad 默认照片共享屏幕

ios - SecRequestSharedWebCredential 凭据包含 'Passwords not saved' ?

objective-c - 如何找出我的 SSL 设置有什么问题?