Makefile 报告 `func[abi:cxx11]()' 的多个定义
Posted
技术标签:
【中文标题】Makefile 报告 `func[abi:cxx11]()\' 的多个定义【英文标题】:Makefile reporting multiple definition of `func[abi:cxx11]()'Makefile 报告 `func[abi:cxx11]()' 的多个定义 【发布时间】:2019-09-14 01:37:26 【问题描述】:我的教授希望我们在使用 IDE 之前使用终端编译和运行一些 c++ 代码,但我在为其创建 Makefile 时遇到了一些麻烦。我今天去他的办公室寻求帮助,但他的回答很含糊。我一直在网上寻找一个有用的视频,但我遇到了一个我不知道如何解决的错误
我尝试使用以下方法在文本编辑器中编辑 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
我不确定此错误消息的含义或如何解决我的问题。
【问题讨论】:
听起来您刚刚定义了两个名为func()
的函数。重命名其中之一。
那是我的错误,谢谢。
这似乎是main.cpp
和myfunc.cpp
的问题。请出示相关代码。另请参阅How to create a Minimal, Complete, and Verifiable example。
【参考方案1】:
我不太确定这个错误消息是什么意思 [...]
一旦您意识到每条线的来源,它就相当简单了。第一行是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 中的问题之前调试您的代码。
【讨论】:
以上是关于Makefile 报告 `func[abi:cxx11]()' 的多个定义的主要内容,如果未能解决你的问题,请参考以下文章