我遇到一个问题,我无法解决关于将iOS App与一个或多个静态库链接的问题。这是问题所在:
我正在创建几个静态库(MACH-O类型:可重定位目标文件),每个静态库都包含大量符号。每个静态库都是FAT库,包含每个iOS / Simulator体系结构的切片。根据我的理解,当我编译我的iOS应用程序时,我的应用程序使用的符号应该编译到我的应用程序中并包含在我的应用程序中,但是,所有符号都包含在内。
我已经使用 otool , nm 和其他工具完成了一些测试,可以看到当我链接到这些库中的任何一个时,即使我不知道#39; t调用库中的任何代码,所有符号都被编译到App中。这需要我的应用程序从42kB一直到3 + MB。
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:0)
Objective-C是一个动态运行时;这是允许的,例如执行:
NSString *classToUse = ["MPViewController" stringByAppendingString:class];
return [[NSClassFromString(classToUse) alloc] init];
...此外,这或多或少正是在加载NIB时发生的情况 - 字符串类和属性名称是从磁盘加载的,然后通过键值编码应用的运行时和属性找到支持类。因此,动态查找不是边缘情况。
因此,链接器不能对Objective-C静态库中使用哪些符号做出任何假设,这与一个C链接器。答案 1 :(得分:0)