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设定程序入口,在使用Unicode和MFC时将得到“unresolved   external   on   _WinMain@16”的LNK2001错误信息。

  3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”   的引用。如果试图使用静态LIBC.LIB                  或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。

  4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。

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

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

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

  8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。

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

error LNK 2001的几种情况和解决方案相关推荐

  1. 电脑卡死的几种情况与解决方案

    前言 **此文章建议点赞收藏,说不好就有用** 很多的小伙伴电脑经常卡死,也不知道解决方案.今天小编就来为大家盘点解决方案方案. 本教程纯属于Windows指南. (该教程没有图片,所以阅读一定仔细) ...

  2. ERROR LNK 2001||2019

    关于这两个错误 首先必须明白链接是为了将目标文件与类库文件链接 所以这种错误 多半是无法找到类库文件 "error LNK2001: unresolved external symbol&q ...

  3. myeclipse部署时An internal error occurred 错误的几种情况

    2019独角兽企业重金招聘Python工程师标准>>> myecplise上将工程部署到应用下时,经常出现 An internal error occurred during: &q ...

  4. JS 内存泄漏的几种情况以及解决方案

    内存泄漏(Memory leak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存 并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了 ...

  5. 步进电机驱动器驱动不了电机的一种情况及解决方案

    情景:新买了一款步进电机驱动器,怎么也无法驱动,只有在电源上电的瞬间或者5v共阳极控制端上电瞬间电机会转动一点点角度.经过问题排查发现是单片机控制端的脉冲信号振幅不够(为3.3v).这里有点问题,有的 ...

  6. idea乱码三种情况和解决方案

    1.tomcat运行时,控制台出现乱码,打开Configuration配置,Server > VM options 设置为 -Dfile.encoding=UTF-8 ,重启 2.项目工程乱码, ...

  7. Error LNK2001 无法解析的外部符号 的几种情况及解决办法

    Error LNK2001 无法解析的外部符号 的几种情况及解决办法 多线程下的单例模式 这里要处理的是懒汉模式. [cpp] view plain copy  class Singleton { p ...

  8. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  9. bartender外部表不是预期格式_批量合并Excel数据时“外部表不是预期格式”或“文件包含损坏数据”的两种情况...

    很多朋友在用Power Query合并(汇总)Excel数据时,碰到过"DataFormat.Error:外部表不是预期格式"或"DataFormat.Error:文件包 ...

最新文章

  1. asp.net webform 复制窗体代码_逆向分析流氓软件自我复制以及防御思路
  2. 详解Batch Normalization及其反向传播
  3. 怎样在bug管理上节省时间
  4. 前端实例练习 - 动效按钮
  5. agc015F Kenus the Ancient Greek
  6. 转载:KOF97键盘连招
  7. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)
  8. java序列化和反序列话总结
  9. 水务信息化数据整合系统方案分析
  10. 制作半透明的毛玻璃效果教程
  11. 手把手教你App推广时如何能找到100个以上渠道!
  12. html表格打印边框不全,解决table边框在打印中不显示的问题 (转)
  13. Amazon AWS
  14. EventBus的理解和使用
  15. 【Docker】(五)使用bind mounts修改Docker容器中的Nginx配置文件
  16. 我们不做看客,只做时代的赋能者—FMI2018人工智能与大数据高峰论坛圆满落幕...
  17. 20190723 架构师-形成技术体系
  18. 进程和线程关系及区别
  19. 浅谈CRM核心理念和运营
  20. (End)从.net到java,工作流平台的延展

热门文章

  1. 浅议极大似然估计(MLE)背后的思想原理
  2. SIM900A保姆级调试日记
  3. Android Preference详解
  4. 前端报错:net::ERR_ABORTED 404
  5. expdp与impdp导出导入特定表
  6. 数据、数据元素和数据项
  7. C语言输入一串数字字符串,C语言——输入一个字符串,将连续数字字符转换为数字(示例代码)...
  8. 【ELT.ZIP】OpenHarmony啃论文俱乐部——多维探秘通用无损压缩
  9. C#读取excel文件时,报“外部表不是预期的格式”
  10. 最全的Python网站开发库!整理出来了!