【发布时间】:2015-06-29 12:10:52
【问题描述】:
我的编译器给了我一些关于函数的多个定义(或者更确切地说是特定 .c 文件中的所有函数)的非常奇怪的错误。
我正在使用包含保护来防止多个声明
我的头文件不包含任何定义,只有声明。文件中没有定义变量,只有函数。
我仔细检查了:只有 .h 文件包含在其他文件中。 .c 文件不包含在任何地方。
我使用相同的方法来包含我的其余代码,我没有任何问题。因此,我不能给出我的问题的最小示例,因为我看不出正在工作的文件和导致编译器问题的文件之间没有(相关的)差异。
在 git 中合并两个分支后首先开始出现错误。两个分支中的每一个都在合并之前顺利编译。
目前,我很高兴有任何关于此问题可能来自何处的提示。
如果有人需要,我也会提供我的代码和/或错误日志。代码比较长,如果有需要请随时咨询
make 的错误信息是
错误信息
src/rhs.o: In function `calculate_rhs':
/home/user/Desktop/WS5/src/rhs.c:15: multiple definition of `calculate_rhs'
src/rhs.o:/home/user/Desktop/WS5/src/rhs.c:15: first defined here
src/rhs.o: In function `evaluate_rhs1':
/home/user/Desktop/WS5/src/rhs.c:103: multiple definition of `evaluate_rhs1'
src/rhs.o:/home/user/Desktop/WS5/src/rhs.c:103: first defined here
src/rhs.o: In function `evaluate_rhs2':
/home/user/Desktop/WS5/src/rhs.c:140: multiple definition of `evaluate_rhs2'
src/rhs.o:/home/user/Desktop/WS5/src/rhs.c:140: first defined here
collect2: error: ld returned 1 exit status
make: [exec] Error 1 (ignored)
rhs.o 的编译器命令是
/usr/lib/petscdir/3.6.0/arch-linux2-c-debug/bin/mpicc -o src/rhs.o -c -fPIC -Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -g3 -O0 -std=c99 -I/usr/lib/petscdir/3.6.0/include -I/usr/lib/petscdir/3.6.0/arch-linux2-c-debug/include `pwd`/src/rhs.c
.h 文件在这里:http://pastebin.com/Za37iWr7
.c 文件在这里:http://pastebin.com/2mSzdZvT
.h 文件仅包含在上述 .c 文件和主函数中
所有其他包含(由 rhs.c)文件的标题是:
- gauss.h:http://pastebin.com/QSaTMRhk
- global.h:http://pastebin.com/sMEkehWM
- eval.h:http://pastebin.com/QjJAGSdf
- indices.h:http://pastebin.com/jHvtnvQh
生成文件: http://pastebin.com/LDj1e7xB
提前感谢:)
【问题讨论】:
-
不,请构造一个minimal test-case,并发布准确的错误消息。现在,我们没有什么可做的。 (另外,请先尝试清理,然后尝试重新构建。)
-
另一个注意事项:如果我正确解释了 git diff,那么合并引入的所有更改都与导致问题的文件无关.....我是在这里没有想法,非常感谢您的帮助。
-
@amdixon:对不起,它在私人服务器上的 gitlab repo 上。反正我可以在这里上传文件吗?
-
@OliverCharlesworth:如上所述,我不能发布最小测试用例,因为最小测试用例确实有效。我不知道是什么导致了这个问题,现在主要是在寻找任何提示。
-
让我们从发布确切的错误消息开始,以及哪个编译步骤失败(即 makefile 行)。有多少个文件?
标签: c makefile include-guards multiple-definition-error