Qt .exe文件打包发布,SQLite数据库无法使用?拷贝了dll也不行?

  前阵子做的项目写了一个 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 文件已经可以正常进行数据库相关操作,也生成了相关的数据库文件。
    在这里插入图片描述
好的,我会尽力回答您的问题。 问题1:搭建VC++操作SQLite的环境 1. 下载SQLite的预编译库文件,包括sqlite3.dllsqlite3.lib和sqlite3.h文件。 2. 创建VC++项目,将sqlite3.h和sqlite3.lib文件添加到项目中。 3. 在项目属性中配置库文件和头文件路径。 4. 在代码中包含sqlite3.h头文件,并使用sqlite3_open函数打开SQLite数据库。 问题2:sqlite3.exesqlite3.dll的作用分别是什么,怎么使用sqlite3.exeSQLite的命令行工具,它可以在没有编程环境的情况下使用SQLite数据库sqlite3.dllSQLite的动态链接库,它可以在编程中使用SQLite数据库。 如果您想在命令行中使用SQLite数据库,可以将sqlite3.exe数据库文件放在同一目录下,打开命令行窗口,进入到该目录下,然后输入sqlite3命令即可进入SQLite的命令行界面。 如果您想在编程中使用SQLite数据库,需要将sqlite3.dll文件添加到项目中,并在代码中调用sqlite3_open函数打开数据库。在使用完毕后,需要调用sqlite3_close函数关闭数据库。 问题3:sqlite数据库文件路径怎么配置? sqlite数据库文件路径可以通过在打开数据库时传递一个文件路径参数来配置。例如,如果您想打开名为test.db的数据库文件,可以使用如下代码: ``` sqlite3 *db; int rc = sqlite3_open("test.db", &db); ``` 在这里,test.db文件将被创建在当前工作目录下。如果您想将数据库文件保存在其他目录下,可以传递一个完整的文件路径作为参数。 另外,如果您想在SQLite的命令行工具中打开一个数据库文件,可以使用如下命令: ``` sqlite3 test.db ``` 其中test.db是数据库文件的名称。如果数据库文件不存在,则会自动创建该文件
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载系统攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值