当前位置: 技术问答>linux和unix
Linux平台下编译出错的情况
来源: 互联网 发布时间:2015-01-28
本文导语: 在一个头文件中定义了几个整形的变量。 然后有多个cpp文件中,也定义了同名的整形变量, 在各个*.cpp文件中各自重新定义。这些*.cpp目前不知道是否include那个定义该同名变量的头文件。 在编译生成*.o文件时...
在一个头文件中定义了几个整形的变量。
然后有多个cpp文件中,也定义了同名的整形变量,
在各个*.cpp文件中各自重新定义。这些*.cpp目前不知道是否include那个定义该同名变量的头文件。
在编译生成*.o文件时,没有问题。当把这些*.o文件联结成一个可执行的文件时,
老是给出该整形变量多重定义的错误提示,联结不成功。
我的问题是:
形成这样错误提示的原因,有哪些解决方法?
或者是否可以设置gcc的编译参数,那样就可以自动消除那些多重定义的错误提示。是编译顺利完成。
然后有多个cpp文件中,也定义了同名的整形变量,
在各个*.cpp文件中各自重新定义。这些*.cpp目前不知道是否include那个定义该同名变量的头文件。
在编译生成*.o文件时,没有问题。当把这些*.o文件联结成一个可执行的文件时,
老是给出该整形变量多重定义的错误提示,联结不成功。
我的问题是:
形成这样错误提示的原因,有哪些解决方法?
或者是否可以设置gcc的编译参数,那样就可以自动消除那些多重定义的错误提示。是编译顺利完成。
|
////////////////////////////////
//header.h
#ifndef any_name_you_like
#define any_name_you_like
extern int global_int;
//other stuff...
#endif
//////////////////////////////////////
//test1.cpp
int global_int;
//other stuff...
//////////////////////////////////////
//test2.cpp
//do NOT touch it
//header.h
#ifndef any_name_you_like
#define any_name_you_like
extern int global_int;
//other stuff...
#endif
//////////////////////////////////////
//test1.cpp
int global_int;
//other stuff...
//////////////////////////////////////
//test2.cpp
//do NOT touch it
|
这些变量是全局的吗?如果是,在一个文件中定义一次,其他地方
在定义前加extern。
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
在定义前加extern。
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
|
这些变量是全局的吗?如果是,在一个文件中定义一次,其他地方
在定义前加extern。
^^声明
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
在定义前加extern。
^^声明
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
|
如果不想重复定义,可以在.h文件头部加上
#ifndef ___YOURHEADFILENAME_H__
#define ___YOURHEADFILENAME_H__
//头文件原文内容
...
...
#endif
#ifndef ___YOURHEADFILENAME_H__
#define ___YOURHEADFILENAME_H__
//头文件原文内容
...
...
#endif
|
#ifndef /*+你的变量*/
#define /*你的变量*/
#endif
#define /*你的变量*/
#endif
|
好像与linux无关