相关疑难解决方法(0)

GCC 10.2.1 上的“多重定义”“首先在此处定义”,但 GCC 8.3.0 上没有

我稍微浏览了一下 Stackoverflow 和更广泛的互联网,发现导致此错误的最常见原因是声明( int var = 1;) 和定义( int var;) 的合并,以及包含文件.c中的文件.h

我刚刚从一个文件分成几个文件的小项目没有做任何这些事情。我困惑。

我制作了该项目的副本,并删除了副本中的所有代码(这很有趣),直到到达这里:

主程序

#include "a.h"

int main() {
    
}
Run Code Online (Sandbox Code Playgroud)

#ifndef A_H
#define A_H

int test;

#endif
Run Code Online (Sandbox Code Playgroud)

交流电

#include "a.h"
Run Code Online (Sandbox Code Playgroud)

几乎是规范的,对吧?但是...

$ rm *.o; gcc -g -c a.c; gcc -g -c main.c; gcc -o main main.o a.o
/usr/bin/ld: a.o:/.../a.h:5: multiple definition of `test'; main.o:/.../a.h:5: first defined here
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

瓦特:(

大约在这个时候,我开始质疑我的配置,并尝试了另一台机器,通过 NFS …

c linux standards gcc header-files

20
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

gcc ×1

header-files ×1

linux ×1

standards ×1