2016-12-26 45 views
1

我是一个新的框架开发,这里是我的情况。我构建了一个私有静态库,以提供给供应商来链接它。 #iOS#Objective-C编译器是否会将产品二进制文件中从属静态库中不相关的拱形符号去除?

目前,我只使用arch armv7和arm64构建我的库,这应该适用于供应商在iOS设备中调试它并归档其应用程序,但不适用于在iOS Simulator中进行调试。模拟器需要x86_64(甚至iPhone 5模拟器中的i386)。禁用在模拟器中调试它的能力并不友好。我正在考虑为他们提供一个静态库的胖架构。

这里是action

lipo -create libSignatureLibary_armv6.a libSignatureLibary_armv7.a libSignatureLibary_i368.a -output libSignatureLibary.a 

合并操作之后,将输出库具有比单一个双尺寸。

问题是,编译器/ Xcode会将最终应用产品二进制文件中的i386和x86_64拱符号去掉吗?如果没有,胖拱库会直接增加产品应用的尺寸,对吧?我应该为供应商构建两个版本的库,一个用于调试,另一个用于存档?这种情况的正确解决方案是什么?

我不知道我应该谷歌什么关键字,我没有现有的产品应用程序链接它来验证这一点,无论是。 (也许我应该建立一个新的。)

请帮助,谢谢!

回答

2

不要担心,链接器只使用.o(可重定位的目标文件,它是汇编程序的输出文件,当您构建静态库时,.m文件将被转换为.o文件。静态库是静态库中目标拱的可重定位目标文件的集合,因此在构建产品二进制文件时它将去除x86_64和i386 .o文件。

此外,链接器不会将未被编译文件直接或间接引用的.o文件链接到可执行文件中。

+0

明白了,谢谢! :) – Itachi

+0

为每个源文件(.m)生成可重定位目标文件,这是否意味着如果我没有使用源文件中的任何符号,它会去掉未使用的类源文件? – Itachi

+0

它将去除静态库中未使用的可重定位目标文件。当你生成可执行文件时,'Build Phases-> Compiled Sources'中包含的所有源文件将被链接到可执行文件中。 – KudoCC

相关问题