为armv6和armv7构建包含另一个静态库的iPhone静态库

5
我有一个Xcode项目,其中包含一个“主”静态库目标,该目标包括/链接来自其他Xcode项目的许多其他静态库。
当为“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)中缺少符号,因此无法构建。
有什么解决方法吗?

Carl,谢谢。也许你可以把这个作为我的问题的答案发布,而不是评论,这样我就可以标记它为已回答。 - Martijn Thé
2个回答

5
我认为那不是答案。如果您没有两个架构,它完全可以工作。在链接库a、b和c到一个库中的示例中,可以实现这一点。
Carl遇到的问题是库中有两个不同的架构(arm6和arm7),链接器无法正确解析它们。
我找到了问题所在。据我所知,这是libtool的一个错误。请参阅我的帖子以获取解决方案。

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


1
SOB博客已经崩溃 :( 这就是为什么好的SO答案不会发布链接,而会发布有意义的数据! - Kaa
抱歉,我没想到七年后我们仍然会读到这个问题!一个有效的链接是https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/。 - jamie
@Jamie 又挂了。Kaa 是对的! - jvb

1

我发现的另一个解决方法是将架构设置为"armv6"。ARCHS_STANDARD_32_BIT 从 armv6 更改为 "armv6 armv7",这会加剧你上面描述的 libtool bug。显然它不会生成针对 armv7 优化的二进制文件,但在 iPhone 4 上仍应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接