QT release 版本方法

QT 静态比动态模式式生成的exe文件大的多,而debug又比release大的多,release的方式根据其他情况来选择,如果是轻量级的小程序,建议使用静态库的方法;重量级的大程序,最好使用动态库的release方法;

一,share 库的release,更改build configuration 为release模式;

重新build all;在release目录下产生.exe可执行文件;对于share的方式,需要依赖软件用到的DLL的库,需要手动把相应的库复制到release的exe目录下;对应的DLL库位于:

C:\Qt\Qt5.6.1\5.6\mingw49_32\bin  目录下,另外需要把C:\Qt\Qt5.6.1\5.6\mingw49_32\plugins\platforms 目录也复制到release的exe目录下;share 方式的release 文件比较多,可以做成打包安装模式;如果比较复杂,不知道依赖库有多少的,可以参考下面的方法进行操作:

http://blog.youkuaiyun.com/styyzxjq2009/article/details/8237358

二,static库的release 需要增加QT static的版本和kits(套件),下载static的连接环境(当然也可以自己编译),按照下面蓝色描述方法找到静态库的编译链接环境(出处http://blog.youkuaiyun.com/goodtomsheng/article/details/44829825):

http://sourceforge.net/projects/static-qt/

https://github.com/fostersoftware/QtStaticWindows

第一个是SourceForge上的项目,第二个是GitHub上的项目,这两个网站希望新手记牢了,以后要找好东西都可以去这两个网站。

GitHub上面的QtStaticWindows比较新,是5.3.2版本的,所以就选这个来做教程示范。

从GitHub网站下载东西,可以直接点击网页右边“Download ZIP”

但是这个下载可能比较卡比较慢,也可能挂掉。推荐的是安装git工具,新建QtStatic目录,在该目录里执行命令:

   git  clone https://github.com/fostersoftware/QtStaticWindows.git

然后等待下载完成,文件就会出现在QtStaticWindows子目录里面。

国外网站速度慢正常,所以本人打包好了一个放在百度网盘分享:

http://pan.baidu.com/s/1nt3d0jZ

位于QtSDK/QtStatic/QtStaticWindows5.3.2.7z

从百度网盘下载即可。

QtStaticWindows5.3.2.7z里面仅仅包含静态编译的Release版Qt库,

仅用于生成程序发布,不便于调试,这个文件里面也没有开发环境,仅仅是一个库。

所以要配合Qt官方的开发环境来使用,集成到官方QtCreator里面用。

目前Qt最新的官方开发环境下载页面:

http://download.qt.io/official_releases/qt/5.4/5.4.0/

下载MinGW版本:qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe

也可以从刚才的网盘链接下载:http://pan.baidu.com/s/1nt3d0jZ

位于QtSDK/Qt5/qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe

安装官方Qt开发环境时,记得把全部组件都选中安装!编译方法参考:https://jingyan.baidu.com/article/363872ec3db7386e4aa16f53.html

把下载或编译安装好的静态库复制到QT环境下的mingw49_32_static;打开QT tools-->options-->build&run选项;增加QT版本;

增加static套件

配置static编译器,打开

C:\Qt\Qt5.6.1\5.6\mingw49_32_static\mkspecs\win32-g++\qmake.conf

QMAKE_LFLAGS_DLL后面的 –shared 改为 –static

QMAKE_LFLAGS后面加上 –static

项目加入static release kits


重新选择build,并编译。


其他方法可以参考如下信息:

http://blog.youkuaiyun.com/goodtomsheng/article/details/44829825;

http://blog.youkuaiyun.com/wsj18808050/article/details/50909381

### QT Release Mode 下断点无效的原因分析 在开发过程中,如果遇到 Qt 应用程序在 Release 模式无法设置有效断点的情况,通常是因为编译器优化选项的影响。Release 模式的默认配置会启用高度的代码优化功能,这可能导致调试信息丢失或变得不可靠。 #### 编译器优化与调试信息的关系 当使用 GCC 或 Clang 进行编译时,默认情况下,`-O2` 或 `-O3` 优化级别会被应用到 Release 构建中[^1]。这些优化可能会移除变量或将它们存储在寄存器中,从而使得调试工具难以跟踪其状态。为了能够在 Release 模式下成功设置断点并进行调试,可以尝试以下方法: --- ### 解决方案一:调整 CMake 配置文件中的构建标志 通过修改 `CMAKE_BUILD_TYPE` 和其他相关参数来保留调试符号的同时保持性能优化。可以在项目的 CMakeLists.txt 文件中加入如下内容: ```cmake set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O1") ``` 上述命令的作用是在 Release 模式下添加 `-g` 参数以生成调试信息,并降低优化等级至 `-O1` 来减少对可读性的破坏。 --- ### 解决方案二:利用 Valgrind 工具辅助排查问题 尽管 Valgrind 主要用于内存泄漏检测和性能分析,但它也可以帮助验证某些运行行为是否符合预期。可以通过指定详细的日志路径以及禁用错误限制等方式启动目标应用程序[^2]: ```bash LD_LIBRARY_PATH=/path/to/valgrind/libs:$LD_LIBRARY_PATH \ /path/to/valgrind -v --error-limit=no --num-callers=40 \ --fullpath-after= --track-origins=yes --log-file=/tmp/valgrind.log \ --leak-check=full --show-reachable=yes --vex-iropt-precise-memory-exns=yes \ /path/to/program program-args ``` 此脚本能够提供更深入的应用执行细节以便进一步诊断潜在原因。 --- ### 解决方案三:检查异常处理机制 有时未捕获的异常可能干扰正常流程甚至阻止断点触发。确认项目源码里是否存在自定义 unwind handlers 并适当标记函数属性为 UNW_FLAG_UHANDLER 可能有助于改善这一状况[^3]。 例如,在实现特定类型的终止处理器 (termination handler) 的时候应声明相应标志位: ```c++ unw_cursor_t cursor; unw_context_t context; // Initialize the cursor with current execution state. unw_getcontext(&context); unw_init_local(&cursor, &context); if(unw_step(&cursor)) { printf("Unwind successful\n"); } else{ // Handle error or call termination handler marked by UNW_FLAG_UHANDLER flag here... } ``` 以上片段展示了如何初始化游标对象并通过逐步展开调用栈来进行控制流恢复操作。 --- ### 总结建议 综合考虑实际需求权衡效率与易维护性之间的关系非常重要。对于需要频繁测试逻辑正确性的场景来说,推荐采用 Debug 版本来完成大部分工作;而对于那些确实有必要在线上环境中定位复杂缺陷的任务,则可通过合理调节编译选项或者借助外部动态链接库监控手段达成目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值