VS编译可执行文件通过Installer Projects进行打包时,依赖的动态库没有自动加载进来,所以通过脚本先提取出来,再一起打包。
首先我们在VS运行时,输出窗口有加载动态库的信息,把信息复制到txt文件中,然后通过脚本解析字符串,将动态库拷贝下来,C盘可以去掉,有需要时再单独拷贝。
Python脚本,根据自己的需求改动
# -*- coding:utf-8 -*-
import shutil
import re
import os
if not os.path.exists(r'.\bin\\'):
os.makedirs(r'.\bin\\')
for line in open("./dll.txt","r",encoding="utf-8"):
#print (line)
b=re.compile('已加载“(.*?)”。').findall(line)
if len(b):
# 指定存放目录
print (b)
str1="C:\\WINDOWS\\"
if str1 in b[0]:
continue
targetPath = r'.\bin\\'
shutil.copyfile(b[0], targetPath + b[0].split("\\")[-1])
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
遇到的问题
1、在迁移到其它机器时,Qt报错:
This application failed to start because it could not find or load the Qt platform plugin "windows"
解决方法:把QT安装路径下platforms文件夹(我的是D:\QT_IDE\5.10.1\msvc2015_64\plugins\platforms)拷贝到应用程序所在目录(注意一定要把目录拷过去,只拷贝里面的dll文件不行)。
如上述方法没有解决,可参考This application failed to start because it could not find or load the Qt platform plugin "windows" - foo__hack - 博客园
2、在迁移到其它机器时,SQL数据库连接报错:
"QSqlDatabase: QMYSQL driver not loaded"
同样将QT安装路径下sqldrivers文件夹拷贝到应用程序所在目录,一定要整个文件夹拷过去。
综上,迁移到其它机器有关Qt报错的,将Qt路径下相关文件夹直接拷贝到应用程序所在目录。