在linux下编译工程的一个模块文件是出现了n多multiple definition of...(函数名)的错误
解决方法如下:
1、为每个文件添加条件编译
#ifndef _文件名_H_
#define _文件名_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**************自己的代码部分**************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _文件名_H_ */
2、将只有本模块会用到的函数和变量前加static,这样的话就不会和其他文件模块用到的函数变量冲突。
也可以解决multiple definition of...的问题。(我的问题就是这样解决的)
3、另外我还搜索到以下方法:
把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。
在工程比较大时采用方法3是个不错的选择。