【问题标题】:iOS 4.1 SDK - Duplicate Symbols in Multiple Static library Linking for Device BuildsiOS 4.1 SDK - 设备构建的多个静态库链接中的重复符号
【发布时间】:2010-09-23 19:19:34
【问题描述】:

我的公司正在为 iPhone 构建一个带有 SDK 4.1 的应用程序。

为此,我们有 3 个级别的项目依赖项,我们的主应用程序“CSM”链接到我们称为“csm-sdk”的 SDK(在 libsrc_csmsdk.a 中),csm-sdk 然后链接到我们的 XMLRPC 库(“libXMLRPC. a")。

为设备编译 csm-sdk 时,它包含所有 ObjC 类的定义,以及两次 oue XMLRPC 库的 C 函数。

然后当 CSM 链接时,它会在同一个库文件中报告 Duplicate objects。

我们使用 -all_load 和 -ObjC 在所有级别链接。

我有另一个项目在 SDK 3.2 上做类似的事情,一切正常......这个项目在 4.1 作为模拟器构建一切正常,只有设备失败。有没有人遇到过类似的情况?

更多详情如下。

谢谢!

格伦·R·马丁

构建错误:

ld: duplicate symbol _OBJC_METACLASS_$_XMLParser in /Users/builder/cc/workingdirs/iphoneclient/csm-sdk/build/Release-iphoneos/libsrc_csmsdk.a(XMLParser.o) and /Users/builder/cc/workingdirs/iphoneclient/csm-sdk/build/Release-iphoneos/libsrc_csmsdk.a(XMLParser.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
ProcessProductPackaging "/Users/builder/Library/MobileDevice/Provisioning Profiles/6EB9AEE7-A844-4017-B076-06C3240F869B.mobileprovision" "build/Release-iphoneos/CSM.app/embedded.mobileprovision"
    cd /Users/builder/cc/workingdirs/iphoneclient
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
    <com.apple.tools.product-pkg-utility> "/Users/builder/Library/MobileDevice/Provisioning Profiles/6EB9AEE7-A844-4017-B076-06C3240F869B.mobileprovision" -o "/Users/builder/cc/workingdirs/iphoneclient/build/Release-iphoneos/CSM.app/embedded.mobileprovision"

ProcessProductPackaging dist.plist "build/CSM.build/Release-iphoneos/CSM.build/CSM.xcent"
    cd /Users/builder/cc/workingdirs/iphoneclient
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
    <com.apple.tools.product-pkg-utility> /Users/builder/cc/workingdirs/iphoneclient/dist.plist -entitlements -format xml -o "/Users/builder/cc/workingdirs/iphoneclient/build/CSM.build/Release-iphoneos/CSM.build/CSM.xcent"

** BUILD FAILED **


The following build commands failed:
CSM:
   Ld "/Users/builder/cc/workingdirs/iphoneclient/build/CSM.build/Release-iphoneos/CSM.build/Objects-normal/armv6/CSM" normal armv6
   Ld "/Users/builder/cc/workingdirs/iphoneclient/build/CSM.build/Release-iphoneos/CSM.build/Objects-normal/armv7/CSM" normal armv7
(2 failures)

Release BUILD failed

设备的otool转储:

Archive : csm-sdk/build/Release-iphoneos/libsrc_csmsdk.a (architecture armv7)
Table of contents from: csm-sdk/build/Release-iphoneos/libsrc_csmsdk.a(__.SYMDEF) (for architecture armv7)
size of ranlib structures: 1960 (number 245)
size of strings: 6256

object           symbol name
XMLParser.o   _OBJC_CLASS_$_XMLParser
XMLParser.o   _OBJC_METACLASS_$_XMLParser
XMLParser.o   .objc_class_name_XMLParser
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asynchronousData
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._methodName
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asynchronousConnection
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asynchronous
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asyncRequestInProgress
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._queueRequests
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._requestTimeout
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._serviceUrl
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._cachingPolicy
XMLRPC.o      _OBJC_METACLASS_$_XMLRPC
XMLRPC.o      .objc_class_name_XMLRPC
XMLRPC.o      _OBJC_CLASS_$_XMLRPC

... Clipped for Brevity ...

CSMWebservice.o l_OBJC_LABEL_PROTOCOL_$_NSObject
CSMWebservice.o l_OBJC_LABEL_PROTOCOL_$_XMLRPCDelegate
XMLParser.o   _OBJC_METACLASS_$_XMLParser
XMLParser.o   .objc_class_name_XMLParser
XMLParser.o   _OBJC_CLASS_$_XMLParser
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._methodName
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asynchronousConnection
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._delegate
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._serviceUrl
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._queueRequests
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._requestTimeout
XMLRPC.o      _OBJC_IVAR_$_XMLRPC._asynchronousError
XMLRPC.o      .objc_class_name_XMLRPC
XMLRPC.o      _OBJC_CLASS_$_XMLRPC

模拟器的otool转储:

Archive : csm-sdk/build/Release-iphonesimulator/libsrc_csmsdk.a
Table of contents from: csm-sdk/build/Release-iphonesimulator/libsrc_csmsdk.a(__.SYMDEF)
size of ranlib structures: 1520 (number 190)
size of strings: 5080

object           symbol name
CSMWebservice.o _OBJC_METACLASS_$_CSMWebservice
CSMWebservice.o _OBJC_CLASS_$_CSMWebservice
CSMWebservice.o l_OBJC_LABEL_PROTOCOL_$_NSObject
XMLParser.o   _OBJC_CLASS_$_XMLParser
XMLParser.o   _OBJC_METACLASS_$_XMLParser
XMLParser.o   .objc_class_name_XMLParser
... No duplication, clipped for brevity ...

【问题讨论】:

    标签: xcode ios4 linker ios xcodebuild


    【解决方案1】:

    您应该链接最终应用部署目标中的所有内容,而不是单个子目标。

    【讨论】:

    • 不同的项目使用这些。因此,他们也需要那些依赖项...... CSM-SDK 需要 XMLRPC 库。 CSM-SDK 会在其他项目中使用,XMLRPC 库作为一个单独的项目维护,如果 Xcode 不能处理这个功能它不应该有,而且 3.2 SDK 做得很好。
    • 我想知道是否有人知道 4.1 (iOS SDK) 中的一个错误,或者这个项目的解决方案,我们在其他方面做得很好,但这是针对 3.2 iOS SDK 的。跨度>
    【解决方案2】:

    这是 4.1 中的一个已知错误,事实上,当我在 rdar 上列出它时,它被列为重复项。我被告知它最近已被修复,只是希望修复在下一个版本中出现。

    【讨论】:

    • 这个错误的状态是什么?我仍然在 Xcode 4.0.2 中看到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多