iOS 4.1 SDK - 多个静态库链接设备构建时出现重复符号

3

我的公司正在为iPhone开发一个使用SDK 4.1的应用程序。

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

在为设备编译csm-sdk时,它包括所有ObjC类的定义和两个oue XMLRPC库的C函数。

然后当CSM链接时,它报告同一库文件中的重复对象。

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

我有另一个在SDK 3.2上执行类似操作的项目,一切正常...而这个在4.1上作为模拟器构建一切正常,只是设备失败了。有人遇到过类似的问题吗?

以下是更多详细信息。

谢谢!

Glenn R. Martin

构建错误:

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

Simulator的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 ...
2个回答

0

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


这个 bug 的状态是什么?我在 Xcode 4.0.2 中仍然看到它。 - an0

0

你应该将最终的应用程序部署目标链接起来,而不是单独的子目标。


不同的项目使用它们,因此它们也需要这些依赖项... CSM-SDK 需要 XMLRPC 库。CSM-SDK 将用于其他项目,而 XMLRPC 库作为一个独立的项目进行维护。如果 Xcode 无法处理此功能,则不应该拥有它,而且,3.2 SDK 可以很好地处理它。 - grmartin
我想知道是否有人知道4.1(iOS SDK)中的错误或此项目的解决方案,我们在其他项目中做得很好,但那是针对3.2 iOS SDK的。 - grmartin

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