【问题标题】:Building iPhone static library for armv6 and armv7 that includes another static library [duplicate]为armv6和armv7构建包含另一个静态库的iPhone静态库[重复]
【发布时间】:2010-03-16 17:51:47
【问题描述】:

我有一个 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) 中丢失符号。

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

M

【问题讨论】:

  • 卡尔,谢谢。也许您可以将其发布为我的问题的答案而不是评论,这样我就可以将其标记为已回答。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • SOB 博客已关闭 :( 这就是为什么好的 SO 答案不会发布链接而是发布有意义的数据!
  • 对不起。没想到七年后我们还会读到它!一个工作链接是binaryfinery.wordpress.com/2010/06/11/…
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2021-02-26
    • 2012-03-01
    • 2011-02-17
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多