一、multiple definition of xxxx
问题解决
问题背景
我在一个头文件里面定义了一个变量,并赋予初值,然后再两个.c 文件里引入了这个头文件,结果就报错 multiple definition of xxxx 错误
问题排查:
在一个.h文件中定义了一个变量,而这个.h文件被多个文件包含,单独编译都没有问题,但是到链接的时候就出现问题了。在多个.o文件中包含此代码。最后在编译器链接的时候,就会将工程中所有的符号整合在一起,由于文件中有重复的变量,于是就会出现重复定义的错误,系统就是提示你“multiple definition of xxx
解决办法:
我看百度写的基本都是在头文件.h所有的变量声明前加上
extern
可以解决问题, 但是我这里依旧无效。 后来我就想试试用 static 关键字定义静态全局变量,看是否能解决, 结果问题还真就解决了!
定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。
编译无报错,问题解决!
二、struct定义类的error:“unknown type name"
问题背景:
结构体定义如下:
我在window系统里编写C语言代码,对于一个函数中结构体作为参数是这么写的
程序编译通过,无报错信息
当我转到 linux 系统里再次运行上述代码时报如下错误:
原因分析:
这种直接用gcc编译的代码,无法直接将 Player 识别成一个结构体,需要加上 struct 关键字。也许是windows的编译器有代码优化编译的功能,能不写 struct 也能编译。正确写法就是要加上 struct 关键字。
解决办法:
加上 struct 关键字
程序编译通过,无报错信息