• Visual Studio 开发(三):Visual Studio 使用时常见问题解决方案


    一、Error LNK2019: 无法解析的外部符号 

    此问题应该是Visual Studio的初学者最常碰到的问题,也是相对来说很让人头疼的问题。

    注:Error LNK2019 问题在VC 6.0 中是 error LNK2001: unresolved external symbol 问题。

    此问题出现在编译的时候,例如:Dlgcode.obj : error LNK2019: 无法解析的外部符号 _readRegmark,该符号在函数 _AboutDlgProc@16 中被引用。

    这种错误的本质是链接器无法在已编译的obj、lib或dll文件中找到函数定义。下面是可以尝试的解决方案:

    1. 检查项目中是否是只有头文件(有了函数声明)却没有lib。一般出现于你使用了第三方提供的库(当然如果库是自己写的,也会这样,重点是没有导入lib),下载了头文件却忘了载库文件,或库文件忘记放到相应的目录下了。

    2. 如果进行上面的检查后发现并没有问题,头文件没问题,cpp文件也没问题,相应的库都正常引入了,但是依旧出现LNK2019错误。此时我们就应该从代码层面去排查问题了。很有可能是C语言和C++语言混编导致的问题。因为C++支持函数重载,所以C++编译器生成的库文件中的函数名会面目全非。

    例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" (?readRegmark@@YAXPAD@Z)这么个函数名。

    当你的函数是用C语言写的,VS编译器会按C语言规则编译,但链接器却不知道还傻傻的用C++规则的函数名去找结果就找不到了。

    解决办法:在C语言的头文件中加入extern "C",代码方式如下:

    extern "C" {
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libavcodec/avcodec.h"
    #include "libswscale/swscale.h"
    #include "libavutil/imgutils.h"
    #include <libswresample/swresample.h>
    #include "SDL.h"
    }

     

  • 相关阅读:
    javascript学习_函数调用模式与this取值
    Git 学习笔记(Git教程-廖雪峰)
    Linux学习一周初体验
    前言_写在立冬时
    2021.10.24驾考日记
    大二上学期的HTML杂碎
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)D题题解
    并查集两优化——按秩合并与路径压缩
    [算法板子] 求拓扑序列(拓扑排序)
    浅谈迭代加深搜索 ( IDDFS )
  • 原文地址:https://www.cnblogs.com/renhui/p/11126969.html
Copyright © 2020-2023  润新知