前阵子做的项目写了一个 Qt 上位机应用程序,用到了 SQLite 数据库,为了实现该应用程序在其他没有安装 Qt 环境的 Windows 系统中运行,以 绿色便携版文件夹软件安装包 两种形式对其输出的 .exe 文件做了打包发布,具体过程记录在这篇博客中:
        QT Creator 应用程序*.exe文件打包发布详细教程【绿色便携形式 和 安装包形式】

  但是过程中遇到的问题是,各个环节均未出错,SQLite数据库的动态库文件也都已经拷贝好的情况下,数据库文件始终无法建立,更别提数据库相关功能的使用了。

  为此,参考了很多篇博客,诸如设置 sqldrive 路径、手动添加 Qt 安装文件夹 bin 目录下 sqldrive 文件夹中的 dll 文件,替换 Qt5Core.dll 文件等等方法均未成功。

  后来发现,我的 .exe 文件单独存在时,在本机上即使没有添加相关的 dll 文件也能成功运行并使用数据库相关功能,但用 windeployqt 添加相关 dll 文件以后涉及数据库的部分就无法使用,或者说数据库根本就无法建立。

  猜测可能是这样一种情况,.exe 程序会默认使用当前所在文件夹中的 dll 文件,若文件不存在,会使用系统环境变量路径中的文件;又或者是需要在程序源代码中明确指定使用的 dll 的路径。由于我安装 Qt 时将相关 dll 文件路径都添加到了系统环境变量中,所以即使我在未添加 dll 文件时,软件仍然能够成功运行,但添加之后,程序使用的就是当前文件路径下的 dll 了,而可能由于缺少某些文件,导致这种奇奇怪怪的问题。于是采用一种暴力手段:

  1. 首先在程序源代码main()函数中明确指定使用的 dll 路径,如下图所示。
    在这里插入图片描述
  2. 再按照我这篇博客中的步骤(点击跳转)用 windeployqt 进行 exe 程序依赖库文件(众多.dll)的拷贝工作,注意要用修改后的源代码编译生成的 release 版本的 .exe 文件拷贝完成后,绿色便携版的文件夹大致是下面这种,包括 exe 可执行文件和一堆 dll 文件。下面这个文件夹里虽然也存在 sqldrives 相关动态库,但数据库文件始终无法建立。
    在这里插入图片描述
  3. 这时进入你的 Qt 安装文件夹下拷贝 plugins 文件夹,可以打开看一下里面是 Qt 安装时附上的各个动态库。路径如下:安装盘符>安装文件夹>软件版本文件夹>使用编译器每个人的安装盘符情况,软件版本情况和使用的编译器可能不一样,但路径相似):
    在这里插入图片描述
  4. 将 plugins 文件夹粘贴到绿色便携版文件夹中,替换所有重复项,此时可以把下图之前文件夹中的这些自动拷贝过来的文件夹删了,删不删都行,这些文件夹中的dll在 plugins 文件夹中都有。
    在这里插入图片描述
  5. 复制过来并删除后的绿色便携版文件夹如下图所示,此时 .exe 文件已经可以正常进行数据库相关操作,也生成了相关的数据库文件。
    在这里插入图片描述
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐