多个文件使用同一个函数时的重复定义错误

xbdvcx2 2005-09-05 12:49:31
我用a.h,a.c实现了一个函数,在b.c ,c.c,d.c中均使用了这个函数,所以在b.c,c.c,d.c中用#include "a.h"包含了进来,分别使用 gcc -c a.c gcc -c b.c gcc -c c.c gcc -c d.c来生成相应的.o文件没有错误,但用 gcc -o main.out a.o b.o c.o d.o 时出现a.c中实现的函数重复定义错误,这该怎么办?
要是在编译 b.o,c.o,d.o时不包含#include"a.h"时,有一个警告信息,说用到的函数没有找到,但在最终用
gcc -o main.out a.o b.o c.o d.o来生成main.out时就没有错误了,而且是 main.out 执行的也正确,这是怎么回事?
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2005-09-05
  • 打赏
  • 举报
回复
#ifndef A_H
#define A_H

//a.h content

#endif
常用方法常用方法

daemeon 2005-09-05
  • 打赏
  • 举报
回复
用static inline修饰
gaoxianfeng 2005-09-05
  • 打赏
  • 举报
回复
支持老猫!!!
sky_cool 2005-09-05
  • 打赏
  • 举报
回复
a.h 里只能有声明不能有定义。
码农天天向上 2005-09-05
  • 打赏
  • 举报
回复
学习!
blh 2005-09-05
  • 打赏
  • 举报
回复
1.
#ifndef A_H
#define A_H

//a.h content

#endif

Rewrite your a.h file according to the upper pattern.

2. If you do not add "static" modifier to your funcion or parameter, they are always regard as global and linker can find out them from object files without declaration, but a warning will be thrown out.
yyy790601 2005-09-05
  • 打赏
  • 举报
回复
楼上不矢为一个方法。
hoyt 2005-09-05
  • 打赏
  • 举报
回复
将你的函数实现从a.h中分离出来,变成一个e.c,然后编译的时候一起编译


欢迎访问我的个人网站 www.linuxc.net
alaiyeshi 2005-09-05
  • 打赏
  • 举报
回复
用动态库不就完了
重复的那个函数扔到动态库里去

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧