從我的理解,一個鏈接錯誤由於重複的符號是指:鏈接器錯誤:如何在一個文件中存在重複的符號?
- 一個符號在多個源文件
- 導致兩個不同的目標文件相同的符號編譯 之後被定義
- 所以鏈接器不知道他應該鏈接到哪兩個符號。
嘗試從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