1

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

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

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

有没有办法解决或解决这个问题?

问候,

4

1 回答 1

2
Is there any way to solve or workaround this problem?

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

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

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

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

于 2013-03-27T15:46:16.700 回答