1

我是框架开发的新手,这是我的情况。我构建了一个私有静态库,将其提供给供应商以链接它。

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

这是动作

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

合并操作后,输出库的大小是单个库的两倍。

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

我不知道我应该研究什么关键字,我也没有现有的产品应用程序链接它来验证这一点。(也许我应该稍后再建一个。)

4

1 回答 1

3

不用担心,链接器只使用.o(可重定位的目标文件,它是汇编器的输出文件,当你建立一个静态库时,一个.m文件会被翻译成一个.o文件。静态库是一个静态库中目标arch的可重定位目标文件的集合)文件,因此在构建产品二进制文件时它将去除x86_64和i386 .o文件。

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

于 2016-12-26T03:44:38.070 回答