目录

 

​​1. 打包命令 -windeployqt​​

​​2.enigma virtual box将库和exe文件打包成一个可执行文件。​​

​​2.1 采用 Enigma Virtual Box 打包成exe​​

​​2.2 无法定位程序输入点 动态链接库问题处理及原因分析​​


1. 打包命令 -windeployqt

 qt自带的windeployqt。

新创建一个目录,将待发布的exe文件放入此目录,而后运行windeployqt。运行完毕后,在此目录下包括exe及其依赖的库文件。

可能提示命令没找到,修改环境变量中的PATH,增加qt的编译工具路径下的bin目录即可,实例:在PATH环境变量中增加C:\Qt\Qt5.13.2\5.13.2\mingw73_64\bin

打包后的文件夹示例:

qt打包相关_编译工具

 

2.enigma virtual box将库和exe文件打包成一个可执行文件。

2.1 采用 Enigma Virtual Box 打包成exe

官网地址为:  ​​https://www.enigmaprotector.com/en/downloads.html​​ 来进行。

此方法在网上有很多资料,比较简单,不再赘述。

基本界面如下:选择qt编译生成主程序。添加依赖的库并保持相对路径不变,依赖的库由第一步中的windeployqt已经拷贝到和exe文件同一个文件夹中了。

 

qt打包相关_环境变量_02

2.2 无法定位程序输入点 动态链接库问题处理及原因分析

打包后运行提示:

qt打包相关_环境变量_03

 

原因分析

在自己的磁盘搜索 此库文件名称 libwinpthread-1,例如我的电脑里面C盘搜出

qt打包相关_环境变量_04

D盘搜出 

qt打包相关_Qt_05

 

查看环境变量中path的配置,上述TDM-GCC和perl的路径配置都在qt前面,同时在1中用windeployqt 打包时,拷贝出来的libwinpthread-1.dll的时间和tdm-gcc是一致的,都是2015/6/28 14:28,说明打包时没有采用qt下的库,而采用了其他库,导致程序在运行时报错。

qt打包相关_Qt_06

将tdm-gcc卸载掉,不用了。再重新运行windeployqt,如下

qt打包相关_编译工具_07

提示没有工具链了。我们查看path的设置,实际上qt安装时,没有将编译工具的路径添加到path中,手动添加,实例如下:

C:\Qt\Qt5.13.2\Tools\mingw730_64\bin

配置后,再次windeployqt ,可以看到库的时间已经qt下mingw编译工具下的库了

qt打包相关_编译工具_08

而后再用virtual box打包成一个单一的exe文件,就可以正常运行了。