gpt4 book ai didi

ios - 防止 Xcode 从静态库中删除未使用的符号

转载 作者:可可西里 更新时间:2023-11-01 04:58:21 26 4
gpt4 key购买 nike

我已经构建了一个静态库,我的 iOS 二进制文件正在链接。静态库的代码剥离已关闭,我可以在存档中看到符号(通过 nm)。

因此,我将该库作为框架链接到我的应用程序中。但是,我实际上并没有直接调用该函数。结果,我可以在二进制文件中看到直接调用的符号,但看不到未调用的符号。但是,因为我实际上希望这些符号在运行时存在,所以我使用 -all_load 进行编译。

但是,这似乎给图书馆的用户带来了不必要的负担。我可以在静态库中添加一些东西来强制执行此操作,而不是依赖于库的用户吗?

最佳答案

根据您要实现的目标,您可以精确控制哪些符号是死剥离的,哪些总是加载的,即使库的用户没有'实际使用它们。

最简单的方法是创建一个库初始化函数,该函数引用您不希望完全删除的确切符号。这是精确的,并且省去了您与链接器命令行选项搏斗的负担,这可能使您免受(不太可能的)工具行为更改的影响。

框架有自动初始化器(非常方便),可以在运行时加载框架时自动调用,在任何静态变量初始化后立即调用。

__attribute__((constructor))
static void MyModuleInitializer()
{
static BOOL initialized = NO;
if (!initialized) {

// References to symbols that should be kept around.

initialized = YES;
}
}

仅供引用,使用 __attribute__((destructor)) 装饰器也支持自动终结器。

关于ios - 防止 Xcode 从静态库中删除未使用的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135085/

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