静态库具有相同的函数名称,导致重复符号错误

时间:2011-08-04 07:12:00

标签: iphone objective-c ipad xcode4

我在iPad应用中使用了2个第三方库。我不知道这些库的源代码。 这些库在两者中都具有相同名称的函数。因为功能名称中的冲突,我得到“Apple Mach - O(id)错误”。我无法更改其中的函数名称,因为源代码未知。在构建应用程序时,错误正在发生。

错误说明:

  

ld:/ Users / Desktop / untitled中的重复符号_T_strcpy   文件夹/ Universal / lib / simulator / myLib.a(mem.o)和   /Users/Library/Developer/Xcode/DerivedData/iOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ios.build/Debug-iphonesimulator/myApp   架构i386的iPad.build/Objects-normal/i386/pdcrypte2.o   collect2:ld返回1退出状态命令   /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2   退出代码1失败

有人可以分享一些建议吗?

1 个答案:

答案 0 :(得分:6)

你几乎搞砸了。原始库的创建者失败了库开发的最基本规则之一:使用库特定前缀预先添加所有导出的符号,以避免命名空间冲突。

唯一的出路是用一个包含名称空间前缀的包装器来包装每个库中的每个函数,将库静态链接到包装器,strip全部不导出符号。然后使用包装器库和符号名称。

实际上,如果库是静态的,您可以解决此问题:How to deal with symbol collisions between statically linked libraries?