如何在其中包含OBJECT文件具有相同名称的静态库?

时间:2011-08-03 11:17:13

标签: iphone objective-c ipad xcode4

我正在开发一个iPad应用程序,其中包含2个第三方静态库。这两个库中的目标文件的名称是相同的。在构建应用程序时,我正在

  

“Apple Mach -O(id)错误”

因为这两个库中的目标文件名称相同。 如何解决这个问题?

错误看起来像:

ld: duplicate symbol _T_strcpy in /Users/indiait-supportservices/Desktop/untitled folder/Universal/lib/simulator/libSecurIDLib.a(mem.o) and /Users/indiait-supportservices/Library/Developer/Xcode/DerivedData/ReceiverForiOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ReceiverForiOS.build/Debug-iphonesimulator/myApp iPad.build/Objects-normal/i386/pdcrypte2.o for architecture i386

collect2: ld returned 1 exit status

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 

failed with exit code 1.

2 个答案:

答案 0 :(得分:0)

您是为一个架构而建吗?如果要构建多个体系结构并使用-all_load链接器标志,则会破坏链接器忽略为多个体系结构定义的符号的能力。作为测试,尝试仅为armv6构建并查看错误是否消失。

有一篇很好的博客文章here,并讨论了类似的问题here

最后,您可以添加以下env var来调试覆盖类别的问题: OBJC_PRINT_REPLACED_METHODS=YES。这将记录哪些方法名称已被类别覆盖,以防万一就是问题。

答案 1 :(得分:0)

看起来你有两个定义相同功能的模块,一个在libSecurIDLib.a(mem.o)pdcrypte2.o。它们应该在它们自己的命名空间(C ++)中,或者它们应该加上前缀,这样它们就不会碰撞(C)。

work arounds如果这是不可能的,但最好安全地命名。