当前位置: 技术问答>linux和unix
多个文件使用同一个函数时的重复定义错误
来源: 互联网 发布时间:2015-10-18
本文导语: 我用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...
我用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 执行的也正确,这是怎么回事?
要是在编译 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 执行的也正确,这是怎么回事?
|
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.
#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.
|
用动态库不就完了
重复的那个函数扔到动态库里去
重复的那个函数扔到动态库里去
|
#ifndef A_H
#define A_H
//a.h content
#endif
常用方法常用方法
#define A_H
//a.h content
#endif
常用方法常用方法