为armv6和armv7构建iPhone静态库,包括另一个静态库

时间:2010-03-16 17:51:48

标签: iphone xcode static-libraries universal-binary fat-binaries

我有一个Xcode项目,它有一个“主”静态库目标,包括/链接到其他Xcode项目中的一堆其他静态库。

在为“优化(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)中遗漏了符号。

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

中号

3 个答案:

答案 0 :(得分:5)

我认为这根本就不是答案。如果你没有两个架构,它将完全奏效。在链接中给出的示例中,可以将库a,b和c链接到一个库中,并与之链接。

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

我发现了问题。据我所知,它是libtool中的一个bug。请参阅我的帖子了解解决方案:

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

答案 1 :(得分:3)

不要将库构建到其他库中 - 这是一种混淆,重复符号错误和难以调试的结果。 看看这个问题:How can I avoid "duplicate symbol" errors in xcode with shared static libraries?

答案 2 :(得分:1)

我发现的另一个修复是将架构设置为“armv6”。 ARCHS_STANDARD_32_BIT已从armv6更改为“armv6 armv7”,这会加剧您在上面描述的libtool错误。显然它不会生成armv7优化的二进制文件,但它仍然可以在iPhone 4上正常工作。

相关问题