VS编译时一些常见错误积累LNK,比如LNK2019、LNK2001(实时更新)

1. lnk2019

       LNK2019错误一般是 compile 能找到 header(.h)文件,但是在链接时找不到需要的 lib 库文件或者是 dll 文件

一般认为在编译 OSG 简单示例的时候遇到这样的错误是因为错误的设置了 lib2。OSG 的 lib 目录中一般有两组文件名相似的 lib 文件,其中一组以 d 结尾,例如:osgDBd.lib, osgViewerd.lib,这个表示该 lib 是用于调试 debug,而不带 d 的一组是用于 release 版本。

如果没有正确的指定 lib 文件,那么一般会出现 error LNK2019 错误。比如,编译时指定的是 debug, 但是依赖项设置的却是不带 d 的那一组 release 版本的 lib 文件;或者是编译时指定 debug,但是依赖项设置的是带 d 的一组。只要编译的选项和调用的 lib 一致即可解决这个问题。

不过我仔细检查了自己调用的 lib,编译的选项和调用的 lib 都是 debug 版本的。

后来发现,开发机器是64位的,而编译选项的目标平台(platform)选择的却是 win32,修改为 x64 之后解决了这个链接错误。

也看到有人说1,前面函数声明与后面的函数定义参数类型不同时,有时 compile 能够通过,但是 link 的时候会出现 error LNK2019 错误。

参考链接:

  1. error LNK2019: unresolved external symbol
  2. 求助:最简单的OSG例子编译出错
  3. error LNK2019: unresolved external symbol "__declspec(dllimport)

2. lnk2001

       一般来说,我们引用第三方库时,需要进行指定依赖项配置,若没有进行相关配置,则编译器会出现“LNK2001:无法解析的外部符号”错误。 (与LNK2019有区别:LNK2019是配置错了,而这里是没有找到)

这个是最常见的问题,具体步骤:

        项目->属性->链接器->常规->附加库目录:填写附加依赖库所在目录(分号间隔多项);

        项目->属性->链接器->输入->附加依赖项:填写附加依赖库的名字.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,
      

    4.如果上述3点都没能解决这个问题,则把源文件添加进工程,这是迫不得已之法,但也是最根本的解决之道!

 

     为了避免遇到以上问题,建议:

          1)引用第三方库时,确认lib库是否使用相同编译平台 

          2)确认编译选项是否一致,比如运行时库和字符集

          3)若需要则添加指定编译宏

          4)添加附加库目录和附加依赖项 

参考链接:

     https://blog.csdn.net/c_base_jin/article/details/83010745 

3. error C2001: newline in constant

     这个错误开发中难免会遇到

     一是可能由于疏忽可能括号、引号等不匹配造成;

     二是由于编码方式引起,解决:由于包含汉子,将其文本编码改为utf8.或者 将源码文件用其它编辑器打开,保存为utf8+bom编码格式。

     注意:有时有的中文标点同样会报错。

参考链接:

     https://blog.csdn.net/allen807733144/article/details/85243819

     https://blog.csdn.net/lpy369369/article/details/86776690

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值