链接器错误:如何在一个文件中存在重复的符号?

时间:2017-08-08 11:06:45

标签: c makefile linker linker-errors ld

根据我的理解,由于重复符号而导致的链接器错误意味着:

  1. 符号在多个源文件中定义
  2. 在编译后在两个不同的目标文件中生成相同的符号
  3. 所以链接器不知道他应链接到哪两个符号。
  4. 在尝试从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

    我怎么能理解这个错误?它可能是什么原因?

1 个答案:

答案 0 :(得分:0)

当我在编译命令中两次包含相同的源文件时发生了这种情况,例如: :

$gcc -o main main.c becool.c foo.c bar.c becool.c end.c

重复的becool.c导致重复的符号错误。

因此,如果这是问题所在,请查看您的编译命令并删除此类重复项