问题简介:
困扰了很久的问题,自从Qt+pcl+vtk环境搭建起来后,虽然在release下能够运行,但是调试效率真的太低了,只能靠肉眼以及qDebug定位问题,实在是事倍功半,不过好在release能够直接打包,项目也刚好交出去,这次打算彻底解决这个问题,程序报错如下:
原因分析:
在网上搜集的多方资料,大部分的原因如下:
1)搭建环境时没有区分DEBUG与RELEASE的lib文件
2)环境变量没设置好
3)Debug下和Release的dll动态库混用
上述问题本人均一一尝试过,首先是搭建环境时没有区分lib文件的问题,仔细看了下我确实没有区分debug与Release版本,直接添加进pro文件,定位可能的问题之后,我又重新编译了下vtk,将lib文件分成两个文件夹并且包含进去,但是这么做之后还是不能编译通过,还是报出同样的错误,得出这可是原因之一,但并不是主要的原因。
环境变量修改之后得出也并不是这个原因。
最后关于动态库混用的问题也基本能够排除,我使用的是QVTKWidgetPlugin.dll,采用控制变量法,在把该文件在pcl的3rdParty下vtk的plugin中将这个删除之后,这个程序依然能够运行,并且debug环境下依然不能运行,可能是我没有使用UI设计师创建组件的原因,但是也能排除掉这个问题。
解决方案:
一筹莫展之际,突然看到这位前辈的帖子,遇到的问题跟我一样,也正好能够解决我的困扰,最终成功在debug下运行;
只需要在工程文件中添加:
CONFIG += debug
CONFIG += release
问题完美解决!!
--------------------------------------------不对,事有蹊跷----------------------------------------------------
加上这段代码之后,虽然在debug能够编译通过并且能成功运行,但是依然不能进行调试,仔细检查了下之后发现我的debug模式下使用的还是Release的动态库,至此,还是定位到vtk重新编译的问题,只好重新编译下了。
我是参照这位前辈的步骤重新编译的,很详细,亲测有效!!!!【PCL】基于C++与QT的PCL环境配置(保姆级教程)_qt pcl_Cheng先生啊的博客-CSDN博客
我的主要原因还是在上一次编译的时候没有区分debug和release版本的动态库,从而导致混用,以至于debug失效。重新编译之后,在debug动态库后缀添加-gd用以区分和调用;
至此debug运行成功!!!!