编写库时,最重要的规则和最佳实践之一是将库的所有符号放入特定于库的命名空间.由于namespace关键字,C++使这很容易.在C中,通常的方法是在标识符前面加上一些特定于库的前缀.
C标准的规则放在那些一些限制(安全编译):AC编译器可以看只是一个标识符的前8个字符,所以foobar2k_eggs并foobar2k_spam可能被解释为有效相同标识符-但是每一个现代的编译器允许任意长标识符所以在我们这个时代(21世纪),我们不应该为此烦恼.
但是如果你面对一些你无法改变符号名称/标识符的库呢?也许你只有一个静态二进制文件和标题或者不想要,或者不允许自己调整和重新编译.
我有静态库A,B和C组织到Xcode项目中.A和B依赖于C.当我构建一个依赖于A和B的iPhone项目时,我得到一个链接器错误,在A和B中检测到重复的符号(来自C).我如何组织这三个静态库,所以我可以将它们包含在其他Xcode项目中而不会遇到此错误?
我在我的iPad应用程序中使用了2个第三方库.我不知道这些库的源代码.这些库在两者中都具有相同名称的函数.因为功能名称中的冲突,我得到"Apple Mach - O(id)错误".我无法更改其中的函数名称,因为源代码未知.在构建应用程序时,错误正在发生.
该错误表明:
ld:/ Users/Desktop/untitled文件夹/ Universal/lib/simulator/myLib.a(mem.o)和/ Users/Library/Developer/Xcode/DerivedData/iOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ios中的重复符号_T_strcpy. build/Debug-iphonesimulator/myApp iPad.build/Objects-normal/i386/pdcrypte2.o for architecture i386 collect2:ld返回1退出状态命令/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++- 4.2退出代码1失败
谁能分享一些建议?