vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案[通俗易懂]

vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案[通俗易懂]  运行vs程序的时候,报错严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号”__declspec(dllimport)public:void__cdeclPointCloudFilter::setptClouds(structLAS_POINT*)”(__imp_?setptClouds@PointCloudFilter@@QEAAXPEAULAS_POINT@@@Z),该符号在函数”private:void__cdeclPointClou

大家好,又见面了,我是你们的朋友全栈君。

  运行vs程序的时候,报错严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl PointCloudFilter::setptClouds(struct LAS_POINT *)" (__imp_?setptClouds@PointCloudFilter@@QEAAXPEAULAS_POINT@@@Z),该符号在函数 "private: void __cdecl PointCloudFilters::doAction(void)" (?doAction@PointCloudFilters@@AEAAXXZ) 中被引用,如下图所示:
在这里插入图片描述
  报这个错误一般是因为使用了一些未定义或者没找到定义的函数或者变量等等。解决的方法通常有以下几种:

  1. 如果是在写代码阶段就报错了(当然如果是这种情况,报错的内容也就不是这样的了,这里只是顺便提一下),那一般是因为包含目录没有设置对,导致程序无法找到外部库的函数定义;而如果是自定义的函数找不到,则需要检查一下函数的拼写是否正确,或者函数在cpp中实现时有没有在函数名前面加上类的定义域(即类名::)。
  2. 如果是运行时报错,常见的原因是你引用了某个库的函数,然后也正确添加了它的头文件路径,vs在写代码阶段可以找到这个函数的定义,但是,由于你没有添加或者正确设置这个库的lib或者dll路径的话,那么vs就会在运行时候报错无法解析的外部符号。库目录(lib文件目录)是在项目->属性->配置属性->VC++目录->库目录里进行添加,如下图所示:
    在这里插入图片描述
  3. 前两种情况是一般的情况,但是如果不是前两种情况的话,那就有可能和宏定义有关了,这也是这篇博客主要想说明的情况。从一开始贴上来的报错信息中可以看出,错误出现在PointCloudFilter类这里。于是,我们打开这个类的头文件,可以在开头的地方发现几行预处理代码,如下图所示。这是一个if_else的语句,大致意思是,如果定义了DLL_IMPLEMENT,则将DLL_API这个宏的值设置为输出dll文件,否则设置为输入dll文件。而这里,这个工程是要输出dll文件的,因此,我们需要在这些代码运行之前先定义好DLL_IMPLEMENT
    在这里插入图片描述
      解决办法就是,打开项目->属性->配置属性->C/C++->预处理器,然后在预处理器栏目这里加上DLL_IMPLEMENT这个宏,如下图所示。确认保存后,再运行程序,就不会报错了。
    在这里插入图片描述
  4. 最后还提一个非常隐蔽且常常被人忽视的情况。那就是你需要确认一下你在属性页的程序配置平台和实际运行的配置平台是一致的,如下图所示:
    在这里插入图片描述
  5. 其他一些特殊问题的解决方案:一个解决方案中包含多个项目且它们之间存在相互引用的情况opencv imwrite所需的引用cloudcompare无法找到ccDefaultPluginInterface类
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153450.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解Python中pyautogui库的最全使用方法

    详解Python中pyautogui库的最全使用方法这篇文章主要介绍了详解Python中pyautogui库的最全使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值在使用Python做脚本的话,有两个库可以使用,一个为PyUserInput库,另一个为pyautogui库。就本人而言,我更喜欢使用pyautogui库,该库功能多,使用便利。下面给大家介绍一下pyautogui库的使用方法。在cmd命令框中输入pip3installpyautogui即可安装该库!常用操作我们在pyautogui库中常

    2022年7月20日
    15
  • 解决:Navicat远程连接mysql失败「建议收藏」

    解决:Navicat远程连接mysql失败「建议收藏」一:修改mysql配置文件,允许远程连接sudovi/etc/mysql/mysql.conf.d/mysqld.cnf将bind-address=127.0.0.1注释二:登录mysql,运行命令grantallon.to用户名@”%”identifiedby“密码”;flushprivileges;三:重启mysqlservicemysqlrestart

    2022年10月14日
    2
  • mbus总线是什么意思_Can总线如何配置500k波特率

    mbus总线是什么意思_Can总线如何配置500k波特率MBus总线上自动波特率识别1、通过前导字节0x68,捕获引脚通过1、0比特的两个上升沿的差值除以2来自动识别出波特率。2、为什么是通过两个上升沿,而不是一个上升沿一个下降沿,比如两个比特11的长度除以2来计算?因为两条平行的MBUS总线间存在电容效应,在实验室里面由于线比较短,不容易测试出来,但在实际产品使用中是真实存在的,因此在实验室里面分别用10nf、47nf、23n…

    2022年10月8日
    2
  • 命令模式 Command「建议收藏」

    命令模式 Command「建议收藏」命令模式 Command动机模式定义实例结构要点总结笔记动机在软件构建过程中,“行为请求者”与”行为实现者”通常呈现一种”紧耦合”,但在某些场合—-比如需要对行为进行记录,撤销/重(Undo / Redo),事务”等处理,这种无法抵御变化的紧耦合是不合适的在这种情况下,如何将”行为请求者”和”行为实现这”解耦?将一组行为抽象为对象,可以实现两者之间的松耦合模式定义将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作实例#i

    2022年8月8日
    6
  • linux 文件重命名_手机文件重命名

    linux 文件重命名_手机文件重命名没有专门的重命名命令用mvab就可以重命名了=========================================mv:move移动文件(延伸功能:重命名,linux系统没有专门的重命名命令)基本格式:移动文件:mv文件名移动目的地文件名重命名文件:mv文件名修改后的文件名…

    2025年10月18日
    4
  • 3DCNN论文阅读

    3DCNN论文阅读3DCNN应用范围:视频动作识别、医疗图像诊断、高光谱图像(HSI)分类等

    2022年6月3日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号