QT6.8.3启用SQLite运行时动态加载扩展 Qt在其官方提供的对SQLite数据库的驱动中禁用了SQLite运行时动态加载扩展的功能因此无法使用SpatiaLite 扩展库。我们可以通过修改sqlite3.c源码和sqlite驱动的CMake构建文件并重新编译SQLite驱动来重启对运行时动态加载扩展的支持。环境准备Qt源码Sources、CMake、Ninja、Visual Studio 2022(x64 Native Tools Command Prompt for VS 2022)、 已编译的SpatiaLite。确保CMake与Ninja已加入环境变量。源码修改在目录QT\6.8.3\Src\qtbase\src\3rdparty\sqlite下找到sqlite3.c文件打开。找到并删除/注释“#define SQLITE_OMIT_LOAD_EXTENSION 1”宏添加如下宏。// #define SQLITE_OMIT_LOAD_EXTENSION 1 删除 #ifndef SQLITE_ENABLE_LOAD_EXTENSION //添加 #define SQLITE_ENABLE_LOAD_EXTENSION 1 #endif再寻找到static int openDatabase(....)函数里的如下部分添加“| SQLITE_LoadExtFunc”。#ifdef SQLITE_ENABLE_LOAD_EXTENSION | SQLITE_LoadExtension | SQLITE_LoadExtFunc //添加 | SQLITE_LoadExtFunc #endif然后在QT\6.8.3\Src\qtbase\src\plugins\sqldrivers\sqlite下打开CMakeLists.txt。在如下位置添加“SQLITE_ENABLE_LOAD_EXTENSION”qt_internal_extend_target(QSQLiteDriverPlugin CONDITION NOT QT_FEATURE_system_sqlite SOURCES ../../../3rdparty/sqlite/sqlite3.c DEFINES SQLITE_ENABLE_COLUMN_METADATA SQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3_PARENTHESIS SQLITE_ENABLE_FTS4 SQLITE_ENABLE_FTS5 SQLITE_ENABLE_GEOPOLY SQLITE_ENABLE_JSON1 SQLITE_ENABLE_MATH_FUNCTIONS SQLITE_ENABLE_RTREE SQLITE_OMIT_COMPLETE SQLITE_ENABLE_LOAD_EXTENSION #添加宏 INCLUDE_DIRECTORIES ../../../3rdparty/sqlite ATTRIBUTION_FILE_DIR_PATHS ../../../3rdparty/sqlite )找到“SQLITE_OMIT_LOAD_EXTENSION”宏删除/注释qt_internal_extend_target(QSQLiteDriverPlugin CONDITION NOT QT_FEATURE_dlopen AND NOT QT_FEATURE_system_sqlite DEFINES #SQLITE_OMIT_LOAD_EXTENSION )编译在QT\6.8.3\Src下创建文件夹build-sqlite然后打开x64 Native Tools Command Prompt for VS 2022进入QT\6.8.3\Src\build-sqlite。执行如下命令注意DCMAKE_INSTALL_PREFIX改为自己的Qt的msvc安装位置。cmake ..\qtbase\src\plugins\sqldrivers ^ -G Ninja ^ -DCMAKE_BU_TYPERelease ^ -DCMAKE_INSTALL_PREFIXF:\QT\6.8.3\msvc2022_64 ^ -DQT_BUILD_EXAMPLESOFF ^ -DQT_BUILD_TESTSOFF构建完成后编译cmake --build . --parallel --target QSQLiteDriverPlugin最后在build-sqlite\plugins\sqldrivers文件夹下获得qsqlite.dll复制覆盖到QT\6.8.3\msvc2022_64\plugins\sqldrivers下。注意这是Release版本的qsqlite.dll只在Qt项目的Release构建下有效。现在构建编译Debug版本清空build-sqlite文件夹在x64 Native Tools Command Prompt for VS 2022下执行如下命令cmake ..\qtbase\src\plugins\sqldrivers ^ -G Ninja ^ -DCMAKE_BUILD_TYPEDebug ^ -DCMAKE_DEBUG_POSTFIXd ^ -DCMAKE_INSTALL_PREFIXF:\QT\6.8.3\msvc2022_64 ^ -DQT_BUILD_EXAMPLESOFF ^ -DQT_BUILD_TESTSOFF构建完成后编译cmake --build . --parallel --target QSQLiteDriverPlugin在build-sqlite\plugins\sqldrivers文件夹里获得qsqlited.dll复制覆盖到QT\6.8.3\msvc2022_64\plugins\sqldrivers下。至此qt的SQLite已支持运行时动态加载扩展。可以使用QSqlDatabase进行数据库操作了。执行load_extension加载拓展。