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) 中丢失符号。

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

4

2 回答 2

5

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

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

我发现了问题。据我所知,它是 libtool 中的一个错误。解决方法见我的帖子:

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

于 2010-06-11T03:59:46.563 回答
1

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

于 2011-12-26T09:46:40.250 回答