在 NetBeans 中正常工作时使用手动 makefile 时所有函数的多重定义

Posted

技术标签:

【中文标题】在 NetBeans 中正常工作时使用手动 makefile 时所有函数的多重定义【英文标题】:Multiple definition of all functions when using manual makefile when it works fine in NetBeans 【发布时间】:2013-11-20 08:32:32 【问题描述】:

在学习 make-files 时,我偶然发现了这个错误,我的老师似乎无法为我指明正确的方向。搜索并阅读了几个相关问题后,我似乎仍然看不到答案。令我惊讶的是,我在 NetBeans 中没有出错。

生成文件:

connect4: connect4.o basicBoardFunctions.o evaluationOfBoard.o hashCoding.o iaMinMaxing.o manageInput.o manageInputGeneral.o connect4.o
    gcc -o connect4 connect4.o basicBoardFunctions.o evaluationOfBoard.o hashCoding.o iaMinMaxing.o manageInput.o manageInputGeneral.o connect4.o

connect4.o: connect4.c
    gcc -c connect4.c

basicBoardFunctions.o: basicBoardFunctions.c 
    gcc -c basicBoardFunctions.c

evaluationOfBoard.o: evaluationOfBoard.c
    gcc -c evaluationOfBoard.c 

hashCoding.o: hashCoding.c
    gcc -c hashCoding.c 

iaMinMaxing.o: iaMinMaxing.c 
    gcc -c iaMinMaxing.c

manageInput.o: manageInput.c
    gcc -c  manageInput.c

manageInputGeneral.o: manageInputGeneral.c
    gcc -c manageInputGeneral.c

clean:
    rm connect4.o basicBoardFunctions.o evaluationOfBoard.o hashCoding.o iaMinMaxing.o manageInput.o manageInputGeneral.o tests.o connect4.o  

我得到的错误:

gcc -o connect4 connect4.o basicBoardFunctions.o evaluationOfBoard.o hashCoding.o iaMinMaxing.o manageInput.o manageInputGeneral.o connect4.o
connect4.o: In function `main':
connect4.c:(.text+0x0): multiple definition of `main'
connect4.o:connect4.c:(.text+0x0): first defined here
connect4.o: In function `getInputSource':
connect4.c:(.text+0xea): multiple definition of `getInputSource' 
connect4.o:connect4.c:(.text+0xea): first defined here
connect4.o: In function `startGame':
connect4.c:(.text+0x1a9): multiple definition of `startGame'
connect4.o:connect4.c:(.text+0x1a9): first defined here
connect4.o: In function `anounceWinner':
connect4.c:(.text+0x2ac): multiple definition of `anounceWinner'
connect4.o:connect4.c:(.text+0x2ac): first defined here
collect2: ld returned 1 exit status

所有这些函数只在主文件“connect4.c”中定义一次,该文件不包含在任何地方。我不知道该尝试什么,但我认为这对受过训练的人来说可能是显而易见的。 我觉得我会受到很多批评,但我认为其他情况不适用于我。

【问题讨论】:

查看链接器命令行,你列出了一些文件多次。 感谢您的帮助。人们对这个问题投了反对票,因为它措辞不当,或者因为它是一个糟糕的标题,或者因为它是一个糟糕的问题内容明智? 【参考方案1】:

问题在于双链接同一个目标文件,connect4.o:

connect4: connect4.o ... connect4.o
    gcc -o connect4 connect4.o ... connect4.o

删除其中一个文件,一切都会好起来的:

connect4: connect4.o ...
    gcc -o connect4 connect4.o ...

【讨论】:

以上是关于在 NetBeans 中正常工作时使用手动 makefile 时所有函数的多重定义的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Netbeans 和 Glassfish 分析企业应用程序?

gunicorn 使用主管启动时会引发数据库错误,手动启动时是不是正常工作?

Netbeans 未正确执行 JavaFX 应用程序

netbeans中的javascript验证问题

使用 maven 编译 netbeans Web 服务项目时出错

Netbeans 和 mysql 通信