从我的理解,一个链接错误由于重复的符号是指:链接器错误:如何在一个文件中存在重复的符号?
- 一个符号在多个源文件
- 导致两个不同的目标文件相同的符号编译 之后被定义
- 所以链接器不知道他应该链接到哪两个符号。
尝试从www.ugfx.io我碰到这个错误来编译演示项目:
duplicate symbol _main in:
.build/obj/GFXLIB/demos/modules/gdisp/basics/main.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [.build/demotest.elf] Error 1
相较于每个复制的符号错误,我能找到在网络上只有一个文件列为此错误的一部分。而属于这个目标文件的源文件只有一个主要的符号。您可以查看它here。
我该怎么理解这个错误?其原因是什么?
有两种可能 - 要么同一个对象的代码被链接两次或源代码包含两次。 –
也许有一个叫做''_main''和经典''int main(...)''的函数。编译器只是认为,_main与main不同,稍后它将“_”附加到stdcall函数和_forgets_以检查重复/将“_main”更改为另一个符号。 __So只需检查文件并尝试用另一个编译器编译并重新链接.__ – cmdLP
也许[objdump](https://linux.die.net/man/1/objdump)[nm](https:/ /linux.die.net/man/1/nm)或[readelf](https://linux.die.net/man/1/readelf)可以提供帮助。也就是说,如果你在Linux上。 – Vroomfondel