错误原因:
当多个文件包含同一个头文件时,就会独立的解释,然后每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。
注意:multiple definition 不同于 redefinition,后者是编译时的错误,用#ifndef, #define, #endif就可以解决,而前者是链接时的错误。
解决:
对于普通的工程,通过将 变量 或 函数 的声明和定义分开,分别放在.h和.c文件中,就可以解决。
但是在内核中,若要创建.c文件,则需要修改内核的Makefile,实在是比较痛苦,因此有一个折中的办法。
1. 头文件的内容只包含声明,注意,不可声明为extern之类的,普通的声明即可;
2. 找到一个需要include该头文件的.c文件,将头文件include进去,将定义加在该.c文件中;
3. 在剩余的所有需要include该头文件的文件中加入 变量 或 函数 的extern声明,注释掉对该头文件的include。
即可!
阅读(1218) | 评论(0) | 转发(0) |