强制静态lib不要使用-all_load标志的-ObjC?

时间:2013-03-27 14:49:10

标签: ios objective-c linker static-libraries clang

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

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

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

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

此致

1 个答案:

答案 0 :(得分:2)

Is there any way to solve or workaround this problem?

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

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

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

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