• “error LNK2019: 无法解析的外部符号”的几种可能原因


    1.前言

    error LNK2019: 无法解析的外部符号这个错之前见过很多次,能知道最根本的原因在于链接过程中没有搜索到程序用到的库文件,即*.lib。
    笔记本重装了系统,有32Bit升到64Bit,运行VTK程序时,始终报错如下:
    1>     正在创建库 E:DriverprogramimgportDebugimgport.lib 和对象 E:DriverprogramimgportDebugimgport.exp
    1>Monitor.obj : error LNK2019: 无法解析的外部符号 "int __cdecl start_convert(int,int,char *,bool)" (?start_convert@@YAHHHPAD_N@Z),该符号在函数 "int __stdcall iEndDocPort(void *)" (?iEndDocPort@@YGHPAX@Z) 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "void __cdecl jpeg_destroy_compress(struct jpeg_compress_struct *)" (?jpeg_destroy_compress@@YAXPAUjpeg_compress_struct@@@Z),该符号在函数 _Bmp2Jpg 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "void __cdecl jpeg_finish_compress(struct jpeg_compress_struct *)" (?jpeg_finish_compress@@YAXPAUjpeg_compress_struct@@@Z),该符号在函数 _Bmp2Jpg 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "unsigned int __cdecl jpeg_write_scanlines(struct jpeg_compress_struct *,unsigned char * *,unsigned int)" (?jpeg_write_scanlines@@YAIPAUjpeg_compress_struct@@PAPAEI@Z),该符号在函数 _Bmp2Jpg 中被引用。
    已经确信所有的依赖库文件都已经正确加载,为什么还会出现这个问题???
    本文重点归纳error LNK2019出现的原因,并提供相应的解决办法。

    2.原因归纳

    2.1 采用开源程序,忘记添加依赖项

    这个是最常见的问题。
    解决办法如下:
    VC6:
    工程、设置、C/C++、分类:Preprocessor、附加包含路径:填写附加头文件所在目录 逗号间隔多项
    工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项
    工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项
    VS20xx:
    项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项
    项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项
    项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项

    2.2 X64编译,采用Win32Debug

    这个错误就是困扰笔者一天的Bug所在。之前完全没有发现。我一直采用32Bit操作系统进行VITK开发,因为兼容国外的一个开源程序法,更换了64Bit系统!
    用过VITK的人都知道,在使用他们是必须在当前的环境下进行编译生成*.lib和*.dll文件。因此 利用VS2013 DeBug+X64编译了这些文件,但是在运行程序时报错了!!!
    这是Win32和X64细节造成的!更改前后如下图所示:
     

    3. VS2010  Win32转换X64

    1.点击“Win32”下拉框,打开“配置管理器”
    2.点击“活动解决方案管理平台”下拉框,选“新建”
    3.点击“键入或选择新平台”下拉框,选"x64",然后点击“确定”
    4.配置完成,可以看见项目平台都变为x64了,点击关闭即完成。
  • 相关阅读:
    python3 TypeError: a bytes-like object is required, not 'str'
    Centos 安装Python Scrapy PhantomJS
    Linux alias
    Vim vimrc配置
    Windows下 Python Selenium PhantomJS 抓取网页并截图
    Linux sort
    Linux RSync 搭建
    SSH隧道 访问内网机
    笔记《鸟哥的Linux私房菜》7 Linux档案与目录管理
    Tornado 错误 "Global name 'memoryview' is not defined"
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14236742.html
Copyright © 2020-2023  润新知