Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197461
  • 博文数量: 77
  • 博客积分: 1749
  • 博客等级: 上尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-28 18:27
文章分类
文章存档

2012年(28)

2011年(49)

分类: LINUX

2011-11-17 15:08:56

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

阅读(1161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~