我正在开发一个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.
答案 0 :(得分:0)
您是为一个架构而建吗?如果要构建多个体系结构并使用-all_load
链接器标志,则会破坏链接器忽略为多个体系结构定义的符号的能力。作为测试,尝试仅为armv6构建并查看错误是否消失。
最后,您可以添加以下env var来调试覆盖类别的问题:
OBJC_PRINT_REPLACED_METHODS=YES
。这将记录哪些方法名称已被类别覆盖,以防万一就是问题。
答案 1 :(得分:0)
看起来你有两个定义相同功能的模块,一个在libSecurIDLib.a(mem.o)
和pdcrypte2.o
。它们应该在它们自己的命名空间(C ++)中,或者它们应该加上前缀,这样它们就不会碰撞(C)。
work arounds如果这是不可能的,但最好安全地命名。