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

时间:2016-12-26 03:06:36

标签: ios xcode static-libraries lipo arch

我是框架开发的新手,这是我的理由。我构建了一个私有静态库,以供供应商链接它。 #iOS#Objective-C

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

以下是action

Error: [$compile:nonassign] http://errors.angularjs.org/1.4.14/$compile/nonassign?p0=activeTabId%20%3D%3D%3D%20tab.id&p1=active&p2=tab
    at angular.js:38
    at q (angular.js:9157)
    at m (angular.js:9170)
    at angular.js:14777
    at n.$digest (angular.js:16219)
    at n.$apply (angular.js:16492)
    at g (angular.js:10872)
    at A (angular.js:11070)
    at XMLHttpRequest.w.onload (angular.js:11011)

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

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

我不知道应该使用哪些关键字进行谷歌搜索,我也没有现有的产品应用链接来验证这一点。 (也许我以后应该建立一个新的。)

请帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

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

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