- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
already defined in *.obj 符号已定义“ ”问题原理及解决方案
VC6 如果想在 stdafx.h 中定义全局变量,由于该头文件会被 include 多次,
所以,经常会出现以下经典的错误: already defined in StdAfx.obj 。
解决方法:把该变量的定义 int g_flag 放到 stdafx.cpp 中,然后在使用的地方
extern 一下。假如你在 CAADlg.cpp 中使用了该变量 g_flag ,那么就在
CAADlg.cpp 的首部,构造函数的定义之外,添加上 extern int g_flag;
许多 Visual C++ 的使用者都碰到过 LNK2005:symbol already defined 和
LNK1169:one or more multiply defined symbols found 这样的链接错误,
而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,
而有的朋友可能知其然却不知其所以然, 那么本文就试图为大家彻底解开关于它
的种种疑惑。
大家都知道,从 C/C++ 源程序到可执行文件要经历两个阶段 :(1)编译器将源
文件编译成汇编代码, 然后由汇编器 (assembler) 翻译成机器指令 (再加上其它相
关信息 )后输出到一个个目标文件 (object file,VC 的编译器编译出的目标文件默
认的后缀名是 .obj) 中;(2) 链接器 (linker) 将一个个的目标文件 (或许还会有若干程
序库 )链接在一起生成一个完整的可执行文件。
编译器编译源文件时会把源文件的全局符号 (global symbol) 分成强 (strong)
和弱 (weak) 两类传给汇编器,而随后汇编器则将强弱信息编码并保存在目标文
件的符号表中。 那么何谓强弱呢?编译器认为函数与初始化了的全局变量都是强
符号,而未初始化的全局变量则成了弱符号。比如有这么个源文件 :
extern int errorno;
int buf[2] = {1,2};
int *p;
int main()
{
return 0;
}
其中 main 、buf 是强符号, p 是弱符号,而 errorno 则非强非弱,因为它只是
个外部变量的使用声明。
有了强弱符号的概念,链接器 (Unix 平台 )就会按如下规则 (参考 [1] ,
p549~p550) 处理与选择被多次定义的全局符号 :
规则 1: 不允许强符号被多次定义 ( 即不同的目标文件中不能有同名的强符号 ) ;
规则 2: 如果一个符号在某个目标文件中是强符号,在其它文件中都是弱符号,
那么选择强符号;
规则 3: 如果一个符号在所有目标文件中都是弱符号,那么选择其中任意一个;
虽然上述 3 条针对的是 Unix 平台的链接器,但据作者试验,至少 VC6.0 的
linker 也遵守这些规则。 由此可知多个目标文件不能重复定义同名的函数与初始
化了的全局变量,否则必然导致 LNK2005 和 LNK1169 两种链接错误。可是,
有的时候我们并没有在自己的程序中发现这样的重定义现象, 却也遇到了此种链
接错误,这又是何解?嗯,问题稍微有点儿复杂,容我慢慢道来。
众所周知, ANSI C/C++ 定义了相当多的标准函数,而它们又分布在许多不
同的目标文件中, 如果直接以目标文件的形式提供给程序员使用
您可能关注的文档
最近下载
- 高压除氧器培训课件.ppt VIP
- 最新行政执法题库行政执法试题及答案附答案详解(夺分金卷).docx VIP
- 最新行政执法题库行政执法试题及答案附答案详解(综合卷).docx VIP
- 最新行政执法题库行政执法试题及答案附答案详解(a卷).docx VIP
- 时速160客货共线铁路简支T梁-24m 通桥(2012)2101-II.pdf VIP
- 解密华为人资资源管理题库.docx VIP
- 最新行政执法题库行政执法试题及答案附答案详解(典型题).docx VIP
- 最新行政执法题库行政执法试题及答案附答案详解(基础题).docx VIP
- 大学生职业生涯规划.pdf VIP
- 个人电脑抵押合同4篇.docx VIP
原创力文档


文档评论(0)