gpt4 book ai didi

ios - 避免静态库中的符号引用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:37 25 4
gpt4 key购买 nike

我开发了一个分发给其他开发者的静态库。如果 CocoaLumberjack (DDLog) 类在最终二进制文件中可用,我想使用它。在静态库中,我定义了类接口(interface)并检查 [DDLog class] 以查看它是否存在。但是在主机应用程序中,如果 CocoaLumberjack 不存在,链接器会提示,因为 DDLog 不存在。

我知道我可以在 App 配置中将符号检查推迟到运行时,但是有没有办法阻止静态库编译在编译对象中引用 DDLog 类?

最佳答案

我认为在最终 App 链接时不可能有 undefined symbol ,即使它们很弱。来自 Mac OS X ld 的文档:

When creating a output file with the static link editor when -twolevel_namespace is in effect (now the default) all undefined references must be satisfied at static link time. The flags to allow undefined references, -Usymbol_name, -undefined warning and -undefined sup_press can't be used. When the environment variable MACOSX_DEPLOYMENT_TARGET is set to 10.3 then -undefined dynamic_lookup can also be used.

因此,如果在链接时有任何 undefined reference (包括您使用的任何不在当前 Base SDK 版本中的 API),它将产生错误。解决此问题的唯一方法是使用 -undefined dynamic_lookup 链接器选项。不幸的是,这会将所有符号查找推迟到运行时,您不能仅指定在使用两级命名空间时要跳过的符号。

对我来说,我不想给最终开发人员增加负担。所以我改为使用 objc_msgSendNSClassFromString,避免使用所有符号。很遗憾必须以这种方式完成,这似乎是 Apple 可以改进的地方。

关于ios - 避免静态库中的符号引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com