我在iOS项目中集成了一个外部库。当我尝试编译时,我得到了11个重复的符号。
这是输出的摘录:
duplicate symbol _serviceCallReturn in:
/Path/to/my/project/Classes/PointEngine/Device/libPointEngineSDK.a(PointEngineSDKUser.o)
/Path/to/my/project/Classes/PointEngine/Device/libPointEngineSDK.a(PointEngineSDKScanner.o)
duplicate symbol _serviceCallType in:
/Path/to/my/project/Classes/PointEngine/Device/libPointEngineSDK.a(PointEngineSDKScanner.o)
/Path/to/my/project/Classes/PointEngine/Device/libPointEngineSDK.a(PointEngineSDKProof.o)
这是什么意思?例如PointEngineSDKUser.o
和libPointEngineSDK.a
之间的关系是什么?知道什么样的错误配置会导致这种情况吗?
当我创建一个空的iOS项目并将库集成到其中时,它就像一个魅力。问题必须出在我现有的项目配置中。
答案 0 :(得分:0)
简而言之:
*.o
个文件是可重定位的ELF。它们是编译器的产品,它总是使用源文件作为其工作的输入。*.a
个文件是ar档案。它们是所谓的ar program的产物,它总是使用可重定位的ELF对象作为其工作的输入。现在,要解决第一个问题(重复符号_serviceCallReturn ):
serviceCallReturn
变量定义,这是不正确的,这就是你看到链接器抱怨的原因。extern
关键字定义其中一个变量。否则,请为其中一个变量使用其他名称。