mfc编译运行错误之errorlnk2019解释

mfc编译运行错误之errorlnk2019解释

ID:8810397

大小:40.00 KB

页数:5页

时间:2018-04-08

mfc编译运行错误之errorlnk2019解释_第1页
mfc编译运行错误之errorlnk2019解释_第2页
mfc编译运行错误之errorlnk2019解释_第3页
mfc编译运行错误之errorlnk2019解释_第4页
mfc编译运行错误之errorlnk2019解释_第5页
资源描述:

《mfc编译运行错误之errorlnk2019解释》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、MFC编译运行错误之errorLNK2019errorLNK2019:无法解析的外部符号....该符号在函数...中被引用这种情况一般都是函数只找到声明但没有实现,或者是少了什么链接库,你可以试试把那两个.h和.c文件直接加入工程中再试试。有一个解决方案,有两个工程A,B。工程B中定义了一个类,在工程A的demo.cpp中引用该类,但是如果是#include"XX,h",则会出现“errorLNK2019:无法解析的外部符号”如果是#include"XX.cpp",则可以顺利编译通过。想来是因为引用.h文件导致找不到.cpp中的定义

2、,而引用.cpp可以通过.cpp找到.h(.cpp有对.h的include)但是如果同在工程B下面,则#include"XX,h"也是正确的,它会自动关联到同名的(反正是对应的).cpp文件。在不同工程中应该如何引用呢?看见一种原因分析,如下:现场情况:funcname在文件file.cpp/h中定义实现voidfuncname(void){;}filecall.c文件内呼叫funcname()函数。出现上面情况。症因:因c/c++混合编程,c文件内函数无法呼叫c++文件内函数。解决,或者将c文件名改为.cpp,或者将c++文件名改

3、为.c上面的解决采用将file.cpp更名为file.c即可。1.在VisualC++.NET2003中,如果使用了/clr而未将CRT链接到可执行文件,将生成此错误。任何由编译器在未使用/clr:initialAppDomain时生成的对象代码都包含对_check_commonlanguageruntime_version函数的引用,该函数在C运行时库(CRT)中定义。如果应用程序在运行库的版本1上运行,该函数将会生成一个错误信息。当前编译器生成的代码与运行库的版本1不兼容。因此,如果在VisualC++.NET2003中编译时不

4、使用CRT,则应在代码中包含_check_commonlanguageruntime_version函数的定义。作为使用_check_commonlanguageruntime_version函数的替代方法,您可以与nochkclr.obj链接。nochkclr.obj包含该函数的一个空版本,当您在运行库的版本1上运行应用程序时,nochkclr.obj不生成错误信息。若要使用当前编译器版本生成应用程序以在运行库的以前版本上运行,应使用/clr:InitialAppDomain。若要生成一个纯MSIL可执行文件(不与CRT链接),则

5、必须在项目中定义该函数,而不能使用nochkclr.obj(.obj是本机代码)。有关可验证代码的更多信息,请参见产生可验证的C++托管扩展组件。有关从托管C++项目创建纯MSIL输出文件的更多信息,请参见将C++托管扩展项目从混合模式转换成纯IL。2.请看下面的示例:externinti;externvoidg();voidf(){i++;g();}intmain(){}如果在生成中包含的某个文件中没有定义i和g,链接器将生成LNK2019。可以添加这些定义,方法是将包含这些定义的源代码文件包括为编译的一部分。或者可以将包含这些定

6、义的.obj或.lib文件传递给链接器。3.对于从早期版本升级到当前版本的C++项目,如果定义了__UNICODE并且入口点为WinMain,需要将入口点函数的名称更改为_tWinMain或_tmain。4.符号声明包含拼写错误,以致于符号声明与符号定义不同。5.使用了一个函数,但其参数的类型或数量与函数定义不匹配。函数声明使用和函数定义使用中的调用约定(__cdecl、__stdcall或__fastcall)不同。6.符号定义在编译为C程序的文件中,而符号是在C++文件中不带extern"C"修饰符声明的。在此情况下,请修改声明

7、,例如不是使用:externinti;externvoidg();而使用:extern"C"inti;extern"C"voidg();同样,如果在将由C程序使用的C++文件中定义符号,请在定义中使用extern"C"。7.符号定义为静态,但稍后在文件外部被引用。没有定义静态类成员。例如,应单独定义下面类声明中的成员变量si:#includestructX{staticintsi;};//intX::si=0;//uncommentthislinetoresolvevoidmain(){Xpx=newX[2];pr

8、intf("n%d",px[0].si);//LNK2019}8.也可能由于为VisualStudio.NET2003进行的一致性工作生成此错误:模板友元和专用化。在VisualStudio.NET2003中,必须定义声明新的非模板函

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。