C ++程序中`func [abi:cxx11]()'的多重定义

时间:2019-09-14 01:37:26

标签: c++ linux makefile linker-errors

我的教授希望我们在使用IDE之前使用终端来编译和运行一些c ++代码。我今天去他的办公室寻求帮助,但他对答案很含糊。我一直在网上四处逛逛,发现一个有用的视频,但遇到了一个我不知道如何解决的错误

我尝试使用以下命令在文本编辑器中编辑Makefile:

all:
    g++ main.cpp myfunc.cpp -o myexe

然后我进入终端窗口并输入:

$ make    

我收到的错误是:

g++ main.cpp myfunc.cpp -o myexe
/tmp/ccjSAvna.o: In function `func[abi:cxx11]()':
myfunc.cpp:(.text+0x0): multiple definition of `func[abi:cxx11]()'
/tmp/cczKi1CW.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 1

我不太确定此错误消息的含义或解决方法。

1 个答案:

答案 0 :(得分:0)

  

我不太确定此错误消息是什么意思[...]

一旦意识到每一行的来历,这是相当简单的。第一行是make从您的Makefile中生成的命令:

g++ main.cpp myfunc.cpp -o myexe

有点奇怪,但是功能强大。通常,makefile会分别编译每个源文件,然后将生成的目标文件链接在一起,但一步一步就可以完成。

接下来的两行是g++的输出:

/tmp/ccjSAvna.o: In function `func[abi:cxx11]()':
myfunc.cpp:(.text+0x0): multiple definition of `func[abi:cxx11]()'
/tmp/cczKi1CW.o:main.cpp:(.text+0x0): first defined here

这些表示代码中的错误。由于这与您的makefile无关,因此我将继续进行下一行。

collect2: error: ld returned 1 exit status

此行仅显示先前的命令结果。这是链接器错误后应该看到的。

Makefile:2: recipe for target 'all' failed
make: *** [all] Error 1

这些行是make的诊断信息,告诉您构建失败的时间。尝试运行为“ all”定义的命令时失败。在这种情况下,这有点多余,但是当您处理更复杂的makefile时,知道哪个规则失败可能会节省时间。

  

[...]或如何解决我的问题。

在查找makefile文件中的问题之前,您可能需要调试代码。