使用Release
模式编译后,release
的目录下包含
Hello1.exe
可执行程序。如果我们需要发布这个程序,那么还需要
QT
的运行库,包括哪些呢?拿一台干净的机器一个个试,终于把这些
Qt
库给找出来,成功运行
QtCore4.dll
QtGui4.dll
mingwm10.dll
libgcc_s_dw2-1.dll
其中要特别注意的是,这些文件应该从
Qt
安装目录下的
[QT安装目录]\qt\bin
子目录中获取,因为[QT安装目录]\bin
也有同样的文件,但是无效。这里仅限
Windows
系统,其他非
Windows
系统尚未研究。不过也碰到一个小问题,
Hello1
程序中有这么一行代码:QStringgbk_msg=codec->toUnicode("你确认要退出HelloQt程序吗?
希望回答对您有帮助.
Windows下开发程序难免会用到动态链接库,然而库依赖在发布时非常容易导致应用程序无法正常启动,常见情况有以下几种:
VS自带有一个dumpbin工具,在要发布应用程序之前,可以使用dumpbin /dependents xx.exe来查看库依赖情况:
由此我们可以把依赖的动态库均打包一份防止缺少dll的问题发生,但是要尤其注意dll的版本问题,否则会导致问题二的发生。
上面说到该问题发生的原因在于应用程序依赖的当前环境下dll版本不对,根本上的解决方案就是在打包时就做好版本一致的检查。
这个是后来遇到的情况,其实原因与问题二相同,只是库之间的依赖传递不太容易发现,出现这个提示说明当前环境下的ucrtbase.dll是不兼容的,也就是版本不对,需要把开发环境下的ucrtbase.dll打包进去或者安装VS运行环境。
嗯还是用后者来的方便,一步到位,再加上Qt自带打包工具,Visual Studio和Qt的库依赖问题就基本解决了。
还有一点值得一提,因为有些系统级的动态库在不同版本OS下虽然名字相同但实现和依赖差别很大,如ws2_32.dll,因此在部署环境下不要随便使用开发环境的版本。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)