编译器是否会从产品二进制文件中的依赖静态库中删除不相关的 arch 符号?

Will the compiler strip the unrelated arch symbols from dependent static library in product binary file?

我是框架开发的新手,这是我的案例。我建立了一个私有静态库来提供给供应商link它。

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

这里是action

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

合并操作后,输出库比单个库大一倍。

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

我不知道应该研究哪些关键字,我也没有现有的产品应用程序 link 来验证这一点。 (也许我以后应该建一个新的。)

不用担心,linker只用到.o(可重定位目标文件,它是汇编程序的输出文件,当你建立静态库时,一个.m文件会被翻译成一个.o文件。静态库是静态库中目标arch的可重定位目标文件)文件的集合,所以它会在构建产品二进制文件时剥离x86_64和i386.o文件。

而且linker不会link编译文件没有直接或间接引用的.o文件变成可执行文件。