Qt静态编译后使用QtCipherSqlitePlugin静态编译库
Qt静态编译后使用QtCipherSqlitePlugin静态编译库
语文功底不好,标题起的有点绕口,解释一下:
就是我使用的Qt是Qt5.15.2静态编译包(要Qt静态编译文件这里下载:QT5.15.2静态编译包下载 - koomee - 博客园 (cnblogs.com)),
2024-04-28 更新:
更好的办法:添加对应的qt_plugin_sqlitecipher.pri文件到QT的modules文件夹 ,123走起
1. 下载QtCipherSqlitePlugin这个插件,并选择静态编译,得到sqlitecipher.lib 和 sqlitecipherd.lib,同时也会得到sqlitecipher.prl、sqlitecipherd.prl 和 sqlitecipherd.pdb,
将这几个文件拷贝到QtInsallDir/\plugins\sqldrivers目录下:
2. 注册插件:将编译目录下的\mkspecs\modules-inst目录下的qt_plugin_sqlitecipher.pri文件,拷贝到QtInsallDir\mkspecs\modules目录下
3. 修改编辑sqlitecipher.prl和sqlitecipherd.prl文件,修改QMAKE_PRL_LIBS 和 QMAKE_PRL_LIBS_FOR_CMAKE字段,将绝对位置改为相对位置
//sqlitecipher.prl QMAKE_PRL_LIBS = $$[QT_INSTALL_LIBS]/Qt5Sql.lib $$[QT_INSTALL_LIBS]/Qt5Sql.lib $$[QT_INSTALL_LIBS]/Qt5Core.lib mpr.lib userenv.lib version.lib $$[QT_INSTALL_LIBS]/qtpcre2.lib netapi32.lib ws2_32.lib advapi32.lib kernel32.lib ole32.lib shell32.lib uuid.lib user32.lib winmm.lib QMAKE_PRL_LIBS_FOR_CMAKE = $$[QT_INSTALL_LIBS]/Qt5Sql.lib;$$[QT_INSTALL_LIBS]/Qt5Core.lib;mpr.lib;userenv.lib;version.lib;$$[QT_INSTALL_LIBS]/qtpcre2.lib;netapi32.lib;ws2_32.lib;advapi32.lib;kernel32.lib;ole32.lib;shell32.lib;uuid.lib;user32.lib;winmm.lib;;;
//sqlitecipherd.prl QMAKE_PRL_LIBS = $$[QT_INSTALL_LIBS]/Qt5Sqld.lib $$[QT_INSTALL_LIBS]/Qt5Cored.lib mpr.lib userenv.lib version.lib $$[QT_INSTALL_LIBS]/qtpcre2d.lib netapi32.lib ws2_32.lib advapi32.lib kernel32.lib ole32.lib shell32.lib uuid.lib user32.lib winmm.lib QMAKE_PRL_LIBS_FOR_CMAKE = $$[QT_INSTALL_LIBS]/lib/Qt5Sqld.lib;$$[QT_INSTALL_LIBS]/lib/Qt5Cored.lib;mpr.lib;userenv.lib;version.lib;$$[QT_INSTALL_LIBS]/qtpcre2d.lib;netapi32.lib;ws2_32.lib;advapi32.lib;kernel32.lib;ole32.lib;shell32.lib;uuid.lib;user32.lib;winmm.lib;;;
4 .使用
#include <QtSql> #include<QtPlugin>
//用如下语句打印可用驱动,测试是否成功:
qDebug() << QSqlDatabase::drivers();
之前没有好好读文档,浅尝辄止,就采用了下面的方法:
这是我在2024-02-18的时候尝试QT数据库编程时记录的方法,能用,就是配置时麻烦一点。但好处是库可以跟着工程一期拷贝着走。
Qt静态编译后使用QtCipherSqlitePlugin静态编译库 @2024-02-18
先入正题讲解决办法(12345走起):
我的开发环境VS2022+Qt-tools+Qt5.15.2(动态编译版和静态编译版都有),在这个环境下的操作如下;
1. 下载QtCipherSqlitePlugin这个插件,并编译sqlitecipher.lib 和 sqlitecipherd.lib 放到你的项目文件夹下(也可以放到其他地方);
2. 在VS中右键你的项目->属性->Qt project seting->选项设置 Additional Project Settings->添加 QTPLUGIN+= sqlitecipher ;
3. 右键你的项目->添加->现有项;选择你编译出来的库 sqlitecipher.lib 和 sqlitecipherd.lib 并添加
4 . 在.cpp文件中包含头文件并添加语句:Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin);
1 2 3 4 | #include <QtSql> #include<QtPlugin> Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin); |
5 . 用如下语句打印可用驱动,测试是否成功:
1 | qDebug() << QSqlDatabase::drivers(); |
如果不出意外你是会成功的。
下面记录我解决这个问题的心路历程,
最近需要用到程序内嵌数据库,SQLite当然是最好的选择,但是Qt自带的SQLite不能加密,
于是就打算使用QtCipherSqlitePlugin这个插件(下载地址:GitHub - devbean/QtCipherSqlitePlugin: A Qt plugin for cipher SQLite.);
先说一下我的开发环境VS2022+Qt-tools+Qt5.15.2(动态编译版和静态编译版都有) 有时也用Qt Creator开发
网上都是讲编译成DLL然后放到Qt动态编译版的 $$QT_DIR\plugins\sqldrivers目录下;我编译成sqlitecipher.dll 和 sqlitecipherd.dll后,采用动态编译时是没有问题的。
1 2 3 4 5 | #include <QtDebug> #include <QtSql> //打印可用驱动 qDebug() << QSqlDatabase::drivers(); |
如下图是可以得到SQLITECIPHER驱动的;
但是在程序发布的时候我想采用静态编译QT编译发布,我编译了 sqlitecipher.lib 和 sqlitecipherd.lib 放到$$QT_DIR\plugins\sqldrivers目录下;在编译时就提示找不到 SQLITECIPHER 的驱动;
于是只有百度求助万能的广大码友。终于,皇天不负有心人,我找到了这位网友的文章:如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC_qt 静态编译怎么添加插件-CSDN博客
摘抄部分内容如下:
1 2 3 4 5 6 7 | 我了解到,Qt“调用静态插件”, Qt正好有那么篇介绍的文章: How to Create Qt Plugins 按照上面的说明,在.pro 文件中加入如下语句: QTPLUGIN+= qsqlodbc 并在.cpp文件中添加语句: #include<QtPlugin> Q_IMPORT_PLUGIN(QODBCDriverPlugin) 原文链接:https: //blog.csdn.net/humadivinity/article/details/50545100 |
由于我使用的开发环境是VS2022+Qt-tools+Qt5.15.2 和Qt Creator里面添加插件语句设置不一样;这里需要这样设置:
在VS中右键你的项目->属性->Qt project seting->选项设置 Additional Project Settings->添加 QTPLUGIN+= sqlitecipher ;
然后要使用Qt plugin需要添加头文件并引入Plugin:
1 2 3 | #include <QtSql> #include<QtPlugin> //引入插件 注意这里是SqliteCipherDriverPluginQ_IMPORT_PLUGIN(SqliteCipherDriverPlugin); |
然后 清理,重新编译,运行,得到如下:
到这里算是成功了!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用