(ZT)VC++的链接错误LNK2001

  学习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错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP中session与cookie的简单使用

2019独角兽企业重金招聘Python工程师标准>>> cookie简单实例&#xff1a; <?php if($_GET[out]){ //注销cookie setcookie(id,); setcookie(password,); echo "<script>location.hrefcookie.php</script>"; …

linux下安装服务,linux下的软件服务安装管理

在centos7下&#xff0c;为系统装一个服务有两种方式&#xff0c;一种是通过系统提供的rpm/yum自动安装&#xff0c;一种是通过服务的官网提供的安装包进行安装。rpm/yum 服务的安装及管理yum -y install 包名: 可以通过yum方式默认安装当前yum源中提供的软件服务&#xff0c;y…

NetBeans Weekly News 刊号 # 27 - Sep 24, 2008

刊号 # 27 - Sep 24, 2008 日程表 注册 NetBeans Day--圣保罗&#xff0c;巴西&#xff08;十月一日&#xff09; 欢迎来到巴西圣保罗的 Sun Tech Days 。赶快在十月一日加入我们的 NetBeans Deep Dive 吧&#xff01;注册 NetBeans Day 是免费的&#xff0c;即使您不参加 Sun …

做项目开发你必须得掌握的知识:设计模式

先分享一个小故事 两个年轻人是大学同班同学&#xff0c;毕业后被同一家公司录取&#xff0c;可以说是站在相同的起跑线上。两人对未来也都是信心满满&#xff0c;踌躇满志。其中一人怀抱满腔激情&#xff0c;到处学习热门框架&#xff0c;但受限于公司体量和业务逻辑&#xff…

985硕博士:你为什么比我差?

全世界只有3.14 % 的人关注了青少年数学之旅身边总有些人看上去很轻松&#xff0c;不仅在工作中游刃有余&#xff0c;还知识渊博&#xff0c;对各种事情有自己的思考。这次&#xff0c;我们非常认真地筛选了这些公众号&#xff0c;他们专注于内容&#xff0c;关心当下发生的事情…

熊猫烧香是天才作品吗?

今天在新闻中看到有关武男的消息&#xff0c;很不幸&#xff0c;再次发现媒体称武男——李俊为天才。这年头&#xff0c;程序员队伍已经非常壮大了&#xff0c;称得上天才作品的有哪些呢&#xff1f;从我自己的角度列举一下&#xff0c;当然不止这些。字处理&#xff1a;WPS DO…

ESXI转HYPER-V,问题接二连三啊(VMDK转VHD)

首先说软件&#xff1a; 要不是用SCVMM来转的话&#xff0c;我用得最爽的还是WINIMAGE&#xff0c;自然流畅。其它的都有各种问题。 其次说说配置更改&#xff1a; 如果原ESXI里只有一个硬盘&#xff0c;一切好说&#xff0c;如果里面挂载了两个&#xff0c;甚至三个硬盘&#…

在linux中查找运行程序句柄,如何查找我的进程在Linux中打开的文件句柄?

首先&#xff0c;您并不需要关心很多关于您不知道的打开的文件描述符。如果你知道你不会再写信给他们&#xff0c;关闭它们是一个好主意&#xff0c;并且不会伤害 - 毕竟你只是做了一个fork()&#xff0c;这个fds打开了两次。但是同样&#xff0c;如果你让他们开放&#xff0c;…

ASP.NET2.0_多语言本地化应用程序

1.设置当前文化 页面类有两个影响本地化的重要属性均在< % Page % >指令设置:1).UICulture 此属性用于指定载入到页面的资源文件,资源文件可以包含页面文本内容的特定语言的翻译版本.其属性值可为中立文化也可为特定文化(下面有介绍&#xff09;2).Culture …

不用“背”单词,一个方法从普通二本到哥伦比亚大学:我是如何做到的?

全世界只有3.14 % 的人关注了青少年数学之旅“学英语太难、太费劲了。”我听过无数人这么说。然而&#xff0c;我的学员们&#xff0c;却都只用了短短3—6个月时间&#xff0c;就以惊人速度提高了英语&#xff1a;小磊&#xff1a;勉强踩着2本线上了大学&#xff0c;四级考了3次…

如何排查 StackOverflow 异常

StackOverflowException 从名字上就能看出来它表示当前执行栈溢出&#xff0c;通常都是由于无限的方法递归调用导致的。举个例子&#xff0c;假如你有下面的一段代码&#xff1a;using System;namespace temp {class Program{static void Main(string[] args){Main(args); // O…

“熊猫烧香”源码启示录

一、 引言 去年秋天回趟老家&#xff0c;适逢家中秋收后“祭宅神”。期间&#xff0c;听亲家二大娘在香毕吟颂的《十柱香》的佛歌&#xff0c;深有感触&#xff1a;百姓烧香祝的是神仙幸福&#xff0c;盼的是亲人平安—这 是作为衣食百姓发自内心的心愿&#xff01;但如今&…

ios之UISplitViewController

iPad的屏幕比iPhone大&#xff0c;所以在界面上&#xff0c;iPad比iPhone多一个UISplitViewController&#xff0c;用来实现iPad在横屏时&#xff0c;分两栏显示所需要的界面&#xff0c;可以一边是目录一边是具体的内容。下面我将详细的阐述UISplitViewController在ipad中的使…

linux安装toncat环境变量,linux下JDK,tomcat的安装与环境变量配置

先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) &#xff0c;下载后放在/home目录中&#xff0c;当然其它地方也行。进入安装目录#cd /home#cp jdk-1_5_0_02-linux-i586.rpm /usr/local#cd /usr/local给所有用户添加可执行的权限#chmod 744 jdk-1_5_0_02-linux-i586.rpm.bin#./…

JavaScript直接导出Excel,Word

<HTML> <HEAD> <title>WEB页面导出为EXCEL文档的方法 </title> </HEAD><body><BR><table id "PrintA" width"100%" border"1" cellspacing"0" cellpadding"0" bgcol…

为什么日本的科学那么牛?

▲ 点击查看日本化学家吉野彰&#xff0c;因发明了现代锂离子电池&#xff08;LIB&#xff09;&#xff0c;成为了今年的诺贝尔化学奖得主&#xff0c;一起获得这个奖项的&#xff0c;还有斯坦利惠廷汉姆、古迪纳夫。吉野彰事实上&#xff0c;当我们往回看这些年诺贝尔奖获得…

技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试

源宝导读&#xff1a;单元测试是伴随软件工程出现和发展的&#xff0c;怎么做大家可能各有见解。本文介绍了单元测试中的反模式&#xff0c;强调了可测试性的重要性&#xff0c;并以 DDD 架构项目的迭代进程作为示例&#xff0c;演示了单元测试的组织过程&#xff0c;展示了单元…

CRM学习笔记(一)

被抽调学习CRM两个礼拜&#xff0c;要回java组了&#xff0c;以后接触机会应该不多了。记录下这段时间的学习总结&#xff0c;以备不时之需。 通过微软提供的视频教程&#xff0c;基本上你想了解的一些很基础的问题&#xff0c;都能找到入口处&#xff0c;剩下的就是通过sdk和在…

Object-C中的字符串对象1-不可变字符串

2019独角兽企业重金招聘Python工程师标准>>> #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {autoreleasepool {NSString *str1"this is string A";NSString *str2"this is string B";NSString *temp;NSCom…

linux环境下作业调度,Linux集群环境下作业调度算法的研究与实现

摘要&#xff1a;集群计算环境中的作业调度接收用户提交的作业请求,并采用适当的调度策略选择计算节点资源来运行用户作业。作业调度策略决定了整个集群系统的效率,尤其是提交计算量大的作业时,良好的作业调度可以大大加快执行速度,因此,作业调度策略是提高集群系统执行并行作业…