VS常见错误之一:error LNK2019: 无法解析的外部符号

  由于经常使用VS的开发环境,所以经常遇到一些错误提示,其中error LNK2019是很常见的一个报错。今天将此错误的原因和常见解决办法根据自己的经验小小总结一下。

  问题样式:

  1>SingleView.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 "protected: int __thiscall CSingleView::CreateViewGLContext(struct HDC__ *)" (?                                                                [email protected]@@[email protected]@@Z) 中被引用

  

  原因:找不到相应的库文件,即xx.lib文件。找不到库文件的原因可能有以下几种:

  ①你使用别人的库,比如说OPenCV的库,OpenGL的库等等第三方库。常见情况是你只是包含了头文件,但是没有引入库文件

  ②你没有使用别人的库,微软自带的一些库也可能出现这样的问题。这时常见情况是链接失败的函数所在的头文件在项目属性的包含目录下,但是相应的库文件却不在项目属性的默认库目录里。比如说常见问题

  样式里的CreateViewGLContext(struct HDC__ *)函数就是这种情况,此函数在头文件wingdi.h里定义,这个头文件在项目属性中默认的包含目录下,但是对应的库文件opengl32.lib却不在库目录里

  ③你使用了自己做的库文件。这种情况自己没有试过,看过网上的一些说法

  解决办法:核心是添加相应的库文件即可

  对于情况①,有两种办法,一种是通常配置一下项目属性就好(在你相应开发环境配置好的前提下),在项目属性的库目录里面添加相应库文件所在的目录,然后在链接器->输入->附加依赖项里加入对应的库文件即可

  

  第二种解决办法是利用预处理命令#pragma comment (lib, "xxx.lib"),关于这条命令的使用方法不是本文的主要目的,读者可参见网上其他博客。这样做的前提是所用的库目录在VS的默认库目录下或者库文件所在目录已经被添加到项目的库目录里或者相应的库文件已经被你拷贝到当前项目目录下,相当于是第一种方法的“代码化”版本

  对于情况②,你只需要找到函数所在的库文件(通常按照函数名在网上搜即可找到函数所在的库文件),然后文件首部添加#pragma comment (lib, "xxx.lib")即可

  对于情况③,因你使用方法不同,可参见情况一和情况二处理

时间: 2024-10-25 11:53:32

VS常见错误之一:error LNK2019: 无法解析的外部符号的相关文章

错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法

晚上花几分钟在windows下测了下pthread的用法,出现错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 经网上搜,反正都没解决,其中一个说引入#pragma comment(lib, "pthreadVC2.lib")后解决,但笔者遇到的不是这个原因,而是版本问题.可参考http://www.cnblogs.com/zhjh256/p/6364777.html解决.

一个小错误:error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::~Turtle(void)" (??1Turtle@@QAE@XZ),该符号在函数 _main 中被引用

昨天在撸代码的时候遇到了一个十分蛋疼的错误 : 错误: 1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::~Turtle(void)" (??1Turtle@@QAE@XZ),该符号在函数 _main 中被引用1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::Turtle(void)" (??0Turtl

error LNK2019: 无法解析的外部符号 __imp_GetUserObjectInformationW,该符号在函数 OPENSSL_isservice 中被引用

错误 18 error LNK2019: 无法解析的外部符号 __imp_GetUserObjectInformationW,该符号在函数 OPENSSL_isservice 中被引用 E:\FileRecv\SimpleAuthenticator(1)\SimpleAuthenticator\SimpleAuthenticator\libeay64.lib(cryptlib.obj) SimpleAuthenticator 错误 19 error LNK2019: 无法解析的外部符号 __im

VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 [email protected] 中被引用

一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 [email protected] 中被引用 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _vsprintf,该符号在函数 _PrintMessage 中被引用 二.问题原因: VS2015默认编译时将许多标准库采用内联方式处理,因而没有可以链

使用SDL2出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” 时的可能错误记录

这几天在使用SDL2,之前一直都没有错,直到上午把项目搬了个地方.结果一直出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” . 看了网上的方法都说是没有正确定义 main 函数 ,这是SDL2main.lib指定需要的函数.结果我把他定义在了"xx.h"这样的头文件中. 原来我一直没理解头文件和源文件的重要区别.把 main 函数定义在 "xx.cpp" 这样的源文件中就可以正确编译了. 看来还需要再

“error LNK2019: 无法解析的外部符号”之分析

最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019. 百度一下讲的并不够全面,反正都没解决我的问题. error LNK2019问题在VC 6.0中是error LNK2001: unresolved external symbol问题,可能错误号改了. 编译时出现类似这样的错误:Dlgcode.obj : error LNK2019: 无法解析的外部符号 _readRegmark,该符号在函数 [email protected] 中被引用.这种错误的本质是链接器

error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 ___tmainCR...(转)

一,问题描述 MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 ___tmainCRTStartup 中被引用  Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令 error LNK2001: unresolved external symbol [email protected] debug/main.exe:fatal error LNK 1

VS2013解决error LNK2019: 无法解析的外部符号 mfcs120ud.lib

最近因为要改一个MFC项目重写学习MFC,没想到只是用VS2013新建一个最简单的MFC项目运行就报类上百个的类似"Error LNK2019: 无法解析的外部符号...mfcs120ud.lib"的错误. 经过一番折腾,终于发现问题所在.打开C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props 发现默认库引用了$(WindowsSDK_LibraryPath

error LNK2019: 无法解析的外部符号

最近在尝试用UDT进行通信,写了两个简单的客户端和服务端,但是编译的时候出现了“error LNK2019: 无法解析的外部符号”错误,为了以后进行总结,还是把解决方法记录下来. 1>------ 已启动生成: 项目: udt_appserver, 配置: Debug Win32 ------1>生成启动时间为 2013/11/11 20:53:08.1>InitializeBuildStatus:1>  正在创建“Debug\udt_appserver.unsuccessfulb