5

我有一个Xcode项目,它有一个“主”静态库目标,包括/链接到其他Xcode项目的一堆其他静态库。构建armv6和armv7的iPhone静态库,其中包含另一个静态库

构建“Optimized(armv6 armv7)”的主库目标时,在CreateUniversalBinary步骤的最后阶段发生错误。对于由主库包括在库中的每个的.o文件时,报告了以下错误(例如,FBConnectGlobal.o文件):

warning for architecture: armv6 same member name (FBConnectGlobal.o) 
in output file used for input files: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv6/libMTToolbox.a(FBConnectGlobal.o) 
and: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv7/libMTToolbox.a(FBConnectGlobal.o) 
due to use of basename, truncation and blank padding 

在结束时,Xcode告诉编译成功。但是,在应用程序项目中使用最终的静态库时,它不会生成,因为它在构建的一部分(armv6)中找到重复的符号,并且在构建的其他部分(armv7)中未找到符号。

任何想法如何解决这个问题?

中号

+0

不要将库建立到其他库中 - 这是混淆,重复符号错误和难以调试结果的秘诀。看看这个问题:http://stackoverflow.com/questions/2300867/how-can-i-avoid-duplicate-symbol-errors-in-xcode-with-shared-static-libraries/2300873#2300873 – 2010-03-16 17:53:56

+0

卡尔,谢谢。也许你可以将它作为我的问题的答案而不是评论,所以我可以将其标记为已回答。 – 2010-03-17 19:26:23

回答

3

不要建库到其他的库 - 它是混乱的处方,重复的符号错误,并且难以调试结果。 看看这个问题:How can I avoid "duplicate symbol" errors in xcode with shared static libraries?

+0

我必须同意这里。我不知道理论上什么是最好的,但在实践中,我只是花了几周时间来调整,切换,并且在阳光下哄骗每一个构建设置和配置安排。最后,唯一可行的是从依赖于我的应用的静态库中删除所有静态库(包括二进制文件和依赖项目以构建静态库)。不要将库链接到库。不要成为英雄。直接将所有内容附加到您的应用程序在这个过程中节省大量的时间。 – Prairiedogg 2010-07-22 02:07:37

5

我不认为这就是答案。如果你没有两个体系结构,它将完全工作。在链接中给出的示例中,可以将库a,b和c链接到一个库中,并与其链接。

Carl遇到的问题是库中有两个不同的体系结构(arm6和arm7),链接程序无法正确解析它们。

我发现了这个问题。据我所知,它是libtool中的一个错误。见我的文章的解决方案:

https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/

+0

你救了我的一天!谢谢! – 2011-12-23 12:57:58

+0

SOB博客已关闭:(这就是为什么好的SO答案不张贴链接,但发布有意义的数据! – Kaa 2016-03-09 00:57:50

+0

抱歉,没想到七年后我们仍然会阅读它!工作链接是https:// binaryfinery .wordpress.com/2010/06/11 /万向静态库的问题,在-iphone-SDK / – jamie 2017-11-07 01:15:16

1

我发现另一种解决方法是集架构为“ARMv6的”。 ARCHS_STANDARD_32_BIT从armv6更改为“armv6 armv7”,从而加剧了上述libtool错误。显然,它不会生成armv7优化的二进制文件,但它仍然可以在iPhone 4上正常工作。