VC++经典错误LNK2001详解

rel="File-List" href="file:///C:%5CDOCUME%7E1%5C217133%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

 学VC++时经常会遇到错误LNK2001该错误非常讨厌,因为对程者来,最好改的错误编译错误,而一般错误时编译 都已通错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学和理解VC++,要想改正错误LNK2001 非常困

  初学者在学VC++程中,遇到的LNK2001错误错误消息主要

  unresolved external symbol “symbol”(不确定的外部符号)。

  如果接程序不能在所有的和目文件内找到所引用的函数、量或标签,将生此错误消息。一般来错误的原因有两个:一是所引用的函数、量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的

  以下是可能LNK2001错误的原因:

  一.由于编码错误导致的LNK2001

  1.不相匹配的程序代或模.DEF)文件能LNK2001。例如,如果在C++ 源文件内声明了一“var1”,却试图在另一文件内以“VAR1”访问该变,该错误

  2.如果使用的内函数是在.CPP文件内定的,而不是在文件内定LNK2001错误

  3用函数如果所用的参数型同函数声明型不符将会LNK2001

  4试图从基的构造函数或析构函数中用虚函数将会LNK2001

  5.要注意函数和量的可公用性,只有全量、函数是可公用的。

  静函数和静态变量具有相同的使用范限制。当试图从文件外部访问任何没有在文件内声明的静态变编译错误LNK2001

  函数内声明的量(局部量) 只能在函数的范内使用。

  C++的全局常量只有静态连接性能。不同于C,如果试图C++的多个文件内使用全局量也会LNK2001错误。一种解决的方法是需要文件中加入常量的初始化代,并在.CPP文件中包含该头文件;另一种方法是使用时给该变以常数

 二.由于编译接的置而造成的LNK2001

  1.如果编译时使用的是/NOD/NODEFAULTLIB选项,程序所需要的运行MFC编译器写入目文件模 但除非在文件中明确包含名,否则这不会被工程文件。在情况下使用/NOD错误LNK2001

  2.如果没有wWinMainCRTStartup定程序入口,在使用UnicodeMFC将得到“unresolved external on _WinMain@16”LNK2001错误信息

  3.使用/MD选项编译时,既然所有的运行都被保留在动态链之内,源文件中“func”的引用,在目文件里即“_imp__func” 的引用。

  如果试图使用静态库LIBC.LIBLIBCMT.LIB接,将在__imp__funcLNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB也会LNK2001

  4.使用/ML选项编译时,如用LIBCMT.LIB接会在_errnoLNK2001

  5.当编译调试版的用程序,如果采用行版模态库进接也会LNK2001;同,使用调试版模态库连行版用程序也会生相同的问题

  6.不同版本的编译器的混合使用也能问题,因新版的里可能包含早先的版本没有的符号和明。

  7.在不同的模使用内和非内编译选项够导LNK2001。如果C++库时打开了函数内/Ob1/Ob2),但是在描述 函数的相应头文件里却关了函数内(没有inline字),这时将得到该错误信息。避免该问题生,应该在相文件中用inline 志内函数。

  8.不正确的/SUBSYSTEM/ENTRY置也能LNK2001

  其LNK2001的原因有很多,以上的原因只是一部分而已,初学者来说这些就理解一子了。但是,分析错误原因的目的是了避免错误生。LNK2001错误虽然比,但是只要注意到了上述问题是能避免和予以解决的。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值