我们知道我们可以强制静态库在链接期间加载所有目标文件。这用于不同的目的,例如将 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/