Visual Studio工程调用第三方库时Debug和Release模式的冲突问题
Debug模型和Release模式区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release:Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
出现报错的原因
我使用Qt和VTK 8.0.1开发项目,按照惯例在属性管理器中配置好Debug/Release版本的include路径,lib路径和lib输入项,在环境变量中添加bin路径。Debug模式下可以正常运行,但是Release模式下报错:
![](https://i-blog.csdnimg.cn/blog_migrate/c864d51fb94f6b0c8f1613437c718165.png)
仔细看可以发现,Program链接的dll是Qt5Cored.dll,而Release版本下的dll结尾是不加d的,也就是应该为Qt5Core.dll。这里补充一下,我使用了一个名叫QVtkOpenGLWidget的控件,它的作用是将VTK的渲染窗口显示到QT的组件中。因为VTK的dll路径不对,导致调用的Qt链接文件也不对了。
即使我在环境变量中添加了Debug和Release的bin目录,但是程序仍会默认链接Debug版本的库。
![](https://i-blog.csdnimg.cn/blog_migrate/a4aa09a3147a3be6623ac95c5c789b09.png)
解决方法
这时我们需要手动在VS中配置Release下的环境,让工程运行时能够调用正确的库,避免出错。
首先,打开调试—(你的工程名)调试属性
![](https://i-blog.csdnimg.cn/blog_migrate/adebbeb41ec9d2bac50fe238e6563cdb.png)
在环境中,取消从父级或项目默认设置继承,并手动输入你的环境路径。
![](https://i-blog.csdnimg.cn/blog_migrate/5ea099139e9e5418951ad3a47e275e5c.png)
输入的格式为
PATH=PATH1;PATH2;PATH3;...%PATH%
路径中需要把继承的路径和自己第三方库的bin路径都包括起来。
比如在我这边,继承的是QtDllPath,通过宏查找知道了在计算机下的绝对路径E:/Softwares/qt/5.14.2/msvc2017_64/bin,那么就写在PATH1中,然后在PATH2上写VTK Release版本下的bin路径,然后点击确定即可。
PATH=E:/Softwares/qt/5.14.2/msvc2017_64/bin;E:\Tools\VTK-2019\VTK-8.0.1-install-Release\bin;%PATH%
在继承值多的情况下可以使用宏路径简洁表达,但是绝对路径是不容易出错的。