代码之家  ›  专栏  ›  技术社区  ›  Martijn Thé

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

  •  5
  • Martijn Thé  · 技术社区  · 16 年前

    我有一个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)中未找到符号。

    有什么办法解决这个问题吗?

    3 回复  |  直到 8 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

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

        2
  •  5
  •   jamie    8 年前

    我认为这根本不是答案。如果你没有两个架构在里面的话,它完全可以工作。在链接中给出的示例中,可以将库A、B和C链接到一个库中,并与之链接。

    Carl遇到的问题是库中有两种不同的体系结构(ARM6和ARM7),链接器无法正确地解决它们。

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

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

        3
  •  1
  •   broderix    14 年前

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