前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序打包问题及解决方法汇总

程序打包问题及解决方法汇总

作者头像
Qt君
发布2019-09-30 15:00:07
1.8K0
发布2019-09-30 15:00:07
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

一直来被问得最多的是关于windows系统上程序打包上问题。经过一段时间的整理,将一些问题和解决方法都列出来供大家参考。

0x00

  小白:怎么我编译好的程序在QtCreator能运行,但我在文件夹下打开却不行了呢?   Qt君:因为QtCreator运行下的程序附带了运行环境,而离开了QtCreator软件没有运行环境会报以下的一些错误(库找不到)。

0x01

小白:那我该怎么找这些库呢? Qt君:你可以根据你的编译配置(Qt版本,编译器,32/64位,release/debug)来选用不同的windeployqt.exe工具帮你生成Qt依赖的运行库。

  • 一般程序生成方法:
代码语言:javascript
复制
windeployqt xxx.exe
  • 如果是使用QML组件需要这样操作:
代码语言:javascript
复制
windeployqt xxx.exe --qmldir qmlPath
  • 注意: 请使用Qt提供的控制台操作。

0x02

小白:怎么会出现PTLib.dll找不到的问题? Qt君:由于windeploqt.exe工具并不能找到第三方库,这时候需要自己对应将库复制到程序的运行目录下。

0x03

小白:0xc000007b错误代码这个又怎么了?

Qt君:可能是你打包时候使用了版本不对应的windeploqt.exe工具,你当时使用的是什么版本的windeploqt.exe? 小白:Qt5.12.2 (MSVC 2017 64-bit)

Qt君:你的程序版本是Qt5.12.2 (MSVC 2017 32-bit),而windeploqt.exe版本是生成64位的库不对咯,你修改为对应的windeploqt.exe就可以了。

0x04

小白:“无法找到入口”?

小白:哦,我明白了。我使用了mingw版本的windeploqt.exe与程序使用MSVC编译器不一样导致生成的程序库找不到入口。 Qt君:不错,学会举一反三了。

0x05

小白:现在才举一反二,还差一例就举一反三了。在使用windeploqt.exe过程中,看到有一个--release参数,在msvc的windeploqt.exe下似乎默认为release参数,但我使用mingw时候却生成的是debug版本的程序库(例:Qt5Cored.dll带d标识)。我还是每次生成之前都输入--release--debug参数了,以防万一。

0x06

小白:这个问题很诡异,它又不提示库找不到,就显示了这信息,该怎么解决呢?

Qt君:造成这一问题有很多,但最有可能的是没有生成platforms/qwindows.dll插件。你可以尝试删除目录下的库再重新生成试一试,或者在对应的Qt安装目录下复制platforms/qwindows.dll插件到自己程序的运行目录下。注意要带上platforms目录

0x07

小白:我用本机能运行,但在其他机器不能运行? Qt君:主要是缺windows相关库。 复制以下路径的库文件到运行目录下:

代码语言:javascript
复制
C:\Windows\System32 (注意:32位编译程序复制)
C:\Windows\SysWOW64 (注意:64位编译程序复制)

0x08

  小白:这次太糟了,双击程序完全没反应,只是一个简单的QML应用,怎么回事呀?   Qt君:由于QML应用大量使用了插件形式的缘故吧。比如import QtQuick.Shapes 1.12则会在程序运行时加载Shapes模块插件。你可以这样,在程序的项目文件添加CONFIG += console然后在命令行执行,看调试输出。因为qml没有断言输出,导致不能弹框警告错误。   小白:运行后看调试输出貌似是缺少Shapes模块。

代码语言:javascript
复制
C:\Users\Strong\Documents\Deploy>Test.exe
QQmlApplicationEngine failed to load component
qrc:/main.qml:3 module "QtQuick.Shapes" is not installed

  Qt君:由于windeploqt.exe工具并不能解析到程序加载的插件,这就导致某些插件没有被复制到,需要手动复制添加Shapes插件。

解决方法:

  • 将Shapes目录
代码语言:javascript
复制
C:\Qt\Qt5.12.2\5.12.2\msvc2017\qml\QtQuick\Shapes
  • 复制到运行目录(C:\Users\Strong\Documents\Deploy)的QtQuick目录下
代码语言:javascript
复制
C:\Users\Strong\Documents\Deploy\QtQuick

如出现以下问题还需要将Qt5QuickShapes.dll复制到程序运行目录下

代码语言:javascript
复制
C:\Users\Strong\Documents\Deploy>Test.exe
QQmlApplicationEngine failed to load component
qrc:/main.qml:3 plugin cannot be loaded for module "QtQuick.Shapes": Cannot load library C:\Users\Strong\Documents\Deploy\QtQuick\Shapes\qmlshapesplugin.dll
  • Qt5QuickShapes.dll文件
代码语言:javascript
复制
C:\Qt\Qt5.12.2\5.12.2\msvc2017\bin\Qt5QuickShapes.dll
  • 复制到运行目录下
代码语言:javascript
复制
C:\Users\Strong\Documents\Deploy\

0x09

  • 复制文件到其他机器过程中导致文件损坏运行不了。
  • 版本不一致的程序库会知道各种奇怪问题。如:5.12.1的程序放在5.12.2库中。
  • 找缺库的工具还可以使用depends.exe
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00
  • 0x01
  • 0x02
  • 0x03
  • 0x04
  • 0x05
  • 0x06
  • 0x07
  • 0x08
  • 0x09
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档