-
无法解析的外部符号
2019-08-11 09:42:40问题描述:无法解析的外部符号_WinMain@16,该符号在函数_tmairCRTStartup中被引用 解决方案:将tchar.h这个头文件给包含进去问题描述:无法解析的外部符号_WinMain@16,该符号在函数_tmairCRTStartup中被引用
解决方案:将tchar.h这个头文件给包含进去
-
error LNK2019: 无法解析的外部符号
2018-08-06 12:50:3811_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 “public: __cdecl cv::VideoCapture::VideoCapture(void)” (??0VideoCapture@cv@@QEAA@XZ),该符号在函数 main 中被引用 1>11_Object...错误描述
1>11_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 “public: __cdecl cv::VideoCapture::VideoCapture(void)” (??0VideoCapture@cv@@QEAA@XZ),该符号在函数 main 中被引用
1>11_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 “public: virtual __cdecl cv::VideoCapture::~VideoCapture(void)” (??1VideoCapture@cv@@UEAA@XZ),该符号在函数 main 中被引用
1>11_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 “public: virtual bool __cdecl cv::VideoCapture::open(int)” (?open@VideoCapture@cv@@UEAA_NH@Z),该符号在函数 main 中被引用
1>11_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 "public: virtual bool __cdecl cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UEBA_NXZ),该符号在函数 main 中被引用
1>11_ObjectDetection.obj : error LNK2019: 无法解析的外部符号 “int __cdecl cv::waitKey(int)” (?waitKey@cv@@YAHH@Z),该符号在函数 main 中被引用
1>F:\DeskTop\x64\Debug\人脸识别.exe : fatal error LNK1120: 5 个无法解析的外部命令问题分析
error LNK2019: 无法解析的外部符号
一般是源代码里用了第三方库,但工程没有添加相应的库目录解决方法
依次选择:项目–>属性
然后,VC++目录–>库目录–>编辑
点击空白处,然后点击“…”,添加相应的路径即可
还没有完,然后点击链接器–>输入–>附加依赖项–>编辑,添加用到的库文件的名称
补充
对于怎么知道自己缺少什么头文件和库文件这个问题,不熟悉项目的新手很是头疼。有一些经验,虽然很笨,供大家参考吧。- 双击错误信息,找到出错的地方,把出错的位置复制到百度搜索一下,寻找他的头文件和库,出错的地方可能是宏定义、函数或变量, 不要大段复制,只复制名称。
- 有时可能双击不会跳转到出错的地方,就直接在代码里寻找标红的地方,可能有好几个文件,都要找,然后再根据标红的部分搜索.h和.lib。
- 一般.h和.lib是成对的,有lib一般都会有相应的h,但.h头文件可以单独存在。
小结
用第三方库时,一般还会遇到 “无法打开包括文件: “opencv2/objdetect/objdetect.hpp”: No such file or directory "的错误
fatal error C1083: 无法打开包括文件: “opencv2/objdetect/objdetect.hpp”: No such file or directory -
LNK2001: 无法解析的外部符号的几种情况
2018-11-01 09:01:51error LNK2001: 无法解析的外部符号无法解析几种情况: 1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _printf 已经在 libcurl.lib(pqueue.obj) 中定义 1>MSVCRT.lib(MSVCR90.dll) :...一般来说,我们引用第三方库时,需要进行指定依赖项配置,若没有进行相关配置,则编译器会出现“LNK2001: 无法解析的外部符号”错误。
这个是最常见的问题,具体步骤:
项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项
项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项若已经按照上述步骤进行配置,但编译器还是报错,可能情况如下:
1.编译lib库和引用lib库平台不一致
lib库采用的编译平台和引用该lib的工程的编译平不兼容导致的。比如项目采用vs2008编译,而该lib是用2010编译的,亦或者项目采用vs2015平台,而lib是vs2008编译的也可能导致链接失败。
2.编译lib库和引用lib库选项不一致情况
1、一个lib库采用“多线程 DLL (/MD)”配置,而另外一个项目采用“多线程(/MT)”编译配置
2、一个lib库采用“使用 Unicode 字符集”配置,而另外一个项目采用“使用多字节字符集”编译配置
3、一个lib库采用选择“release 版本 ”配置,而另外一个项目采用选择 “debug 版本 ”编译配置
4、一个lib库采用“wind32平台 ”配置,而另外一个项目采用“wind64平台 ”编译配置3.没有添加指定预编译宏
在使用curl静态库时,却遇到了编译链接错误:
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_init
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_setopt
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_perform
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup解决方法是,在自己的项目属性中添加一个预编译宏,CURL_STATICLIB,
为了避免遇到以上问题建议:
1、引用第三方库时,确认lib库是否使用相同编译平台
2、确认编译选项是否一致。比如运行时库和字符集
3、若需要则添加指定编译宏
4、添加附加库目录和附加依赖项