Linux平台下编译出错的情况

yudang 2003-02-13 10:02:53
在一个头文件中定义了几个整形的变量。
然后有多个cpp文件中,也定义了同名的整形变量,
在各个*.cpp文件中各自重新定义。这些*.cpp目前不知道是否include那个定义该同名变量的头文件。

在编译生成*.o文件时,没有问题。当把这些*.o文件联结成一个可执行的文件时,
老是给出该整形变量多重定义的错误提示,联结不成功。

我的问题是:
形成这样错误提示的原因,有哪些解决方法?
或者是否可以设置gcc的编译参数,那样就可以自动消除那些多重定义的错误提示。是编译顺利完成。
...全文
65 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asvaboy1980 2003-02-17
  • 打赏
  • 举报
回复
肯定是在头文件中,重复的定义了变量.
你可以试试Qt啊,qt中的qmake对一般的程序也可以很方便的生成makefile文件
xgcahbb 2003-02-16
  • 打赏
  • 举报
回复
好像与linux无关
boxban 2003-02-16
  • 打赏
  • 举报
回复
////////////////////////////////
//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
yudang 2003-02-16
  • 打赏
  • 举报
回复
其实具体情况是这样的:
头文件:header.h
在头文件里定义了int变量,
然后test1.cpp与test2.cpp这两个文件都include 这个头文件。
然后各自编译成*.o文件时,没有问题。
在把这两个*.o文件联结成一个可执行文件时,就出错了。
yudang 2003-02-16
  • 打赏
  • 举报
回复
我一般修改的方法是:
在所有遇到类是定义的地方,我以前采用了
mikekong(吹尽狂沙始到金)的方法。
#ifndef /*+你的变量*/
#define /*你的变量*/
#endif
但是在联接的时候,会出现如下的出错提示信息。
undefined reference to `nJudge_Dex01_01'
nJudge_Dex01_01就是类似的定义的整形变量。
胖和尚minifat 2003-02-14
  • 打赏
  • 举报
回复
这些变量是全局的吗?如果是,在一个文件中定义一次,其他地方
在定义前加extern。
^^声明
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
lixf76 2003-02-14
  • 打赏
  • 举报
回复
这些变量是全局的吗?如果是,在一个文件中定义一次,其他地方
在定义前加extern。
如果只在本文件内使用,在定义前面加static。
这样修改一下就应该没问题了。
mikekong 2003-02-14
  • 打赏
  • 举报
回复
#ifndef /*+你的变量*/
#define /*你的变量*/
#endif
westar 2003-02-14
  • 打赏
  • 举报
回复
如果不想重复定义,可以在.h文件头部加上
#ifndef ___YOURHEADFILENAME_H__
#define ___YOURHEADFILENAME_H__
//头文件原文内容
...
...
#endif

23,121

社区成员

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

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