QT debug 功能正常 realease和windeplayqt工具打包部分功能无法使用或者不正常

时间:2024-05-19 12:57:28

说明

在项目的开发中,一般程序员都是使用debug版本进行程序的编写和调试,习惯好一些的程序员可能会天天用realease跑一遍自己写的程序是否正常,但是很多程序员可能都不会这么做,直到程序功能完成时,才将其使用realase一遍,然后进行打包给测试进行测试,这时候很有可能就会出现realease部分功能无法使用(比如按钮无效果)的情况。

开发环境

我使用的开发环境是QT Creator,关于debug和release的区别,网上有很多说明,这里就不详细说他们之间的区别了,其实使用QT Creator还有一个Profile版本。按照QT官方的说明, profile则是在debug和realease之中取一个平衡,兼顾性能和调试, 可以类似的看做是性能更优但是又方便调试的版本。因此很多时候我们发现realease版本功能不正常的时候,可以使用profile进行调试来发现问题。

错误说明

最近项目需求有一个上传文件的需求,通常这个需求可以使用第三方库libcurl来完成文件的上传,我这边使用的具体是不是libcurl我也不是很清楚,我使用的自己公司封装的库,可能也是封装libcurl而成的库,
使用QT的QLibrary来动态加载库。下图1是加载库并且上传文件的部分代码,使用debug可以成功打印出2的日志,但是使用realease或者Profile却没有进入,这时候还以为是static变量在realease版本下被优化了,其实根本就不是这个原因(ps:这是错误的想法) ,导致这个原因就是加载库失败,原来是自己根本就没有把上传文件的库(TYFileServerSDK.dll,即下图第一行标红代码)放到项目生成的目录下,这里使用到了相对路径,注意这里不是代码的路径,项目的路径通过图2可以看到
QT debug 功能正常 realease和windeplayqt工具打包部分功能无法使用或者不正常
QT debug 功能正常 realease和windeplayqt工具打包部分功能无法使用或者不正常

结论

很多时候,我们在使用C++开发的时候,会用到很多外部的dll(动态库)或者lib(静态加载)和一些配置文件(.ini和txt等),这时候如果出现realease功能无法正常使用的情况,一般先从环境入手,对照realease和debug版本的所有需要的文件是否都一样,因为 realease版本优化了,所以很多时候并不会弹出错误提示,如果从代码着手可能找不到问题的根本原因。
ps:该文章适合C++新手和某些特殊情况