lnk200错误

问题描述:error LNK2005怎么解决 本篇文章给大家谈谈error lnk2001怎么解决,以及error lnk2005解决方法,希望对各位有所帮助,不要忘了收藏本站喔。

link出错,LNK2001和LNK1120.

lnk200错误的相关图片

1、在编译代码时如果出现以下错误提醒说明已经犯错了。错误类型:error:LNK2005 。

2、打开程序代码可以看到在ini.h头文件中定义了如下全局变量。

3、在其他代码文件(如Main.cpp)中再次引用ini.h头文件时就会再次定义ini.h中的那些全局变量。这样就造成了变量的重复定义。

4、在头文件的首行输入如下命令:#pragma once。

5、或者将头文件件定义在如下设定的宏中。

6、此后再进行编译既可以避免重定义错误了。

大家帮我看看这个程序,我觉得没有错呀,可是链接时总是显示出错的相关图片

大家帮我看看这个程序,我觉得没有错呀,可是链接时总是显示出错

你把main()函数拼写错误了,应该是手误,

mian()

改成

main()

如果还不行,就在前面添加一个void修饰符。

运行结果为:

error LNK2005怎么解决的相关图片

error LNK2005怎么解决

错误 LNK1120 为您提供该链接的无法解析的外部对象数 (number)。导致无法解析的外部对象的条件由错误 LNK2001 描述,此错误出现在该错误信息之前(对每个无法解析的外部对象都出现一次)。

//就是说每出现一次LNK1120都会在之前出现一个LNK2001。

所以主要是解决LNK1120关键是要解决链接器工具错误 LNK2001 这分一下的情况(来自VS 2008的帮助),在这里我只复制一些比较常见的,如果还不行,你重建工程来吧~~。

一、代码问题

1.如果 LNK2001 诊断文本报告 __check_commonlanguageruntime_version 是无法解析的外部符号,在 function 中找到了未定义的外部符号 (symbol)。若要解决此错误,请提供符号定义或移除引用它的代码。

2.成员模板的定义超出了类的范围。Visual C++ 的一个限制是,成员模板的定义必须完全位于封闭类内。

3.代码中大小写不匹配

4.如果项目使用函数内联,但在 .cpp 文件而非头文件中定义函数,则会导致 LNK2001。

5.试图引用没有外部链接的函数或数据会导致 LNK2001。

6.缺少函数主体或变量会导致 LNK2001。

7.调用参数类型与函数声明中的参数类型不匹配的函数会导致 LNK2001。名称修饰将函数参数合并到最终修饰函数名中。

8.错误包含的原型导致编译器需要没有提供的函数体,这样会导致 LNK2001。如果同时具有函数 F 的类实现和非类实现,请注意 C++ 范围解析规则。

9.在使用 C++ 时,将函数原型包含在类定义中但未能包含实现(该类的此函数的实现)会导致 LNK2001。

10.试图从抽象基类的构造函数或析构函数调用纯虚函数会导致 LNK2001。纯虚函数没有基类实现。

11.试图在函数范围外使用用该函数声明的变量(局部变量)会导致 LNK2001。

二、编译和链接问题

1.项目缺少对库 (.LIB) 或对象 (.OBJ) 文件的引用。有关更多信息,请参见用作链接器输入的 .lib 文件。

2.如果使用 /NODEFAULTLIB 或 /Zl,包含所需代码的库将不会链接到项目,除非已显式地包括了这些库。(在使用 /clr 或 /clr:pure 进行编译时,您将看到对 .cctor 的引用;有关更多信息,请参见 混合程序集的初始化。)

3.如果正在使用 Unicode 和 MFC,如果没有创建 wWinMainCRTStartup 的入口点,将在 _WinMain@16 上得到无法解析的外部对象;请使用 /ENTRY。请参见 Unicode 编程摘要。

4.将用 /MT 编译的代码与库 LIBC.lib 链接会在 _beginthread、_beginthreadex、_endthread 和 _endthreadex 上导致 LNK2001。

5.链接需要多线程库的代码(任何 MFC 代码或用 /MT 编译的代码)会在 _beginthread、_beginthreadex、_endthread 和 _endthreadex 上导致 LNK2001。有关更多信息,请参见下列知识库文章:

6.在用 /MD 进行编译时,因为所有的运行时现在都存放在一个 DLL 中,所以源中的“func”引用在对象中变为“__imp__func”引用。如果试图与 LIBC.lib 或 LIBCMT.lib 静态库链接,则将在 __imp__func 上得到 LNK2001。当不用 /MD 进行编译时,如果试图与 MSVCxx.lib 链接,则并非总是得到 LNK2001,但可能会有其他问题。

7.在生成应用程序的调试版本时与发布模式库链接会导致 LNK2001。同样,使用 /Mxd 选项(/MTd 或 /MDd)和/或定义 _DEBUG,然后再与版本库链接,将可能会产生无法解析的外部对象(同时还会出现其他问题)。将发布模式生成与调试库链接同样会导致类似问题。

8.将 Microsoft 库版本和编译器产品版本混合可能会有问题。新编译器版本的库可能包含早期版本的库中没有的新符号。可能需要更改搜索路径中的目录顺序,或将它们更改为指向当前版本。

9.使用库文件选择下的“工具”|“选项”|“项目”|“VC++ 目录”对话框,可以更改搜索顺序。项目的“属性页”对话框中的“链接器”文件夹可能也包含可能已过期的路径。

10.当安装了新的 SDK(可能在不同的位置),但没有将搜索顺序更新为指向新位置时,可能会出现此问题。通常情况下,应将新 SDK 的 include 目录和 lib 目录的路径放在默认 Visual C++ 位置的前面。另外,包含嵌入路径的项目可能仍然指向旧路径,这些路径是有效的,但对于安装到不同位置的新版本所添加的新功能已过期。

11.编译器供应商之间、甚至同一编译器的不同版本之间当前没有 C++ 命名标准。因此,链接用其他编译器编译的对象文件可能无法生成相同的命名方案,从而导致错误 LNK2001。

12.在不同模块上混合内联和非内联编译选项会导致 LNK2001。如果创建 C++ 库时打开了函数内联(/Ob1 或 /Ob2),但描述函数的相应头文件的内联是关闭的(没有 inline 关键字),则将发生此错误。若要防止此问题,请在要包含到其他文件中的头文件中用 inline 定义内联函数。

13.如果使用 #pragma inline_depth 编译器指令,请确保具有 设置为 2 或更大的值,并确保使用 /Ob1 或 /Ob2 编译器选项。

14.在创建纯资源 DLL 时省略 LINK 选项 /NOENTRY 将导致 LNK2001。

15.使用不正确的 /SUBSYSTEM 或 /ENTRY 设置会导致 LNK2001。例如,如果编写基于字符的应用程序(控制台应用程序)并指定 /SUBSYSTEM:WINDOWS,您将得到无法解析的 WinMain 外部对象。有关这些选项和入口点的更多信息,请参见 /SUBSYSTEM 和 /ENTRY 链接器选项。

错误 1 error LNK2001: 无法解析的外部符号 _mainCRTStartup 错误 2 error LNK1120: 1 个无法解析的外部命的相关图片

错误 1 error LNK2001: 无法解析的外部符号 _mainCRTStartup 错误 2 error LNK1120: 1 个无法解析的外部命

编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形成的原因,就可以轻松解决它了。

造成LNK2005错误主要有以下几种情况:

1.重复定义全局变量。可能存在两种情况:

A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。

正确的应该是在一个CPP文件中定义如下:

int g_Test;

那么在使用的CPP文件中就应该使用:

extern int g_Test。

即可,如果还是使用int g_Test,那么就会产生LNK2005错误,一般错误错误信息类似:

*.obj error LNK2005 int book c? already defined in *.obj。

切记的就是不能给变量赋值否则还是会有LNK2005错误。

这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:

(1)声明必须使用extern关键字。

(2)不能给变量赋初值

所以,下面的是声明:

extern int a;。

下面的是定义

int a;

int a = 0; 。

extern int a =0;。

B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中随意定义一个全局变量,并且对于变量名也不予考虑,这也往往容易造成变量名重复,而造成LNK2005错误。

2.头文件的包含重复。

往往需要包含的头文件中含有变量、函数、类的定义,在其它使用的地方又不得不多次包含之,如果头文件中没有相关的宏等防止重复链接的措施,那么就会产生LNK2005错误。解决办法是在需要包含的头文件中做类似的处理:

#ifndef MY_H_FILE //如果没有定义这个宏。

#define MY_H_FILE //定义这个宏。

……. //头文件主体内容。

…….

#endif

上面是使用宏来做的,也可以使用预编译来做,在头文件中加入:

#pragma once

//头文件主体

C++中出现 LNK2005:错误

VC编译程序时过程是这样的,在编译控制台程序时编译器并不是从main函数开始执行,而是去找mainCRTStartup函数,mainCRTStartup函数做些工作,如把一个命令行的字符串拆分成几个字符串等工作,然后去mainCRTStartup再去调用main函数。你新建一个cpp文件就可以了,但是如果你建了cpp文件,但是没有main函数,那么就会提示无法解析的符号_main,已在mainCRTStartup中引用,其实就是main函数你没有定义,但是mainCRTStartup调用了它。而你的这个错误是没有找到mainCRTStartup函数,你只要新建一个cpp文件就可以了,系统会替你写mainCRTStartup函数的。

原文地址:http://www.qianchusai.com/lnk200%E9%94%99%E8%AF%AF.html

她悲伤地看着我英语,她悲伤地看着我英语she gave me

她悲伤地看着我英语,她悲伤地看着我英语she gave me

lw/芭蕾舞剪影黑白,芭蕾女孩剪影黑白

lw/芭蕾舞剪影黑白,芭蕾女孩剪影黑白

sketch东西都不显示了

sketch东西都不显示了

把emuelec系统刷入盒子,emuelec能刷任何盒子吗

把emuelec系统刷入盒子,emuelec能刷任何盒子吗

airplay只投声音,airplay投屏无法调节音量

airplay只投声音,airplay投屏无法调节音量

摘抄开头结尾35字,摘抄开头结尾50字左右

摘抄开头结尾35字,摘抄开头结尾50字左右

小学三年级作文教学视频教学,小学语文三年级作文教学视频

小学三年级作文教学视频教学,小学语文三年级作文教学视频

华硕路由器拦截广告,华硕路由器拦截广告怎么解除

华硕路由器拦截广告,华硕路由器拦截广告怎么解除

奔驰故障码u11A300,奔驰故障码p029921解决方法

奔驰故障码u11A300,奔驰故障码p029921解决方法

畅想一下2035年我的国

畅想一下2035年我的国