构建Qt 6.5.1 SQLite插件后调用SQLite3函数出现未定义引用求助
问题根源
你用VS2017生成的sqlite3.lib是MSVC工具链专属的库格式,和MinGW的GCC工具链完全不兼容——这就是调用SQLite函数时出现未定义引用的核心原因。MinGW需要的是.a或.dll.a格式的静态/导入库,而非MSVC的.lib。
解决步骤
1. 生成MinGW兼容的SQLite库
用MinGW自带的dlltool工具,从SQLite的sqlite3.def和sqlite3.dll生成兼容的导入库:
# 打开MinGW64的终端,切换到sqlite文件所在目录 dlltool -d sqlite3.def -l libsqlite3.a -D sqlite3.dll
执行后会得到libsqlite3.a,把它和sqlite3.dll、头文件放在同一个目录下(比如你的C:\libs\sqlite-amalgamation-3420000)。
2. 重新配置CMake编译Qt SQLite插件
确保打开的是Qt 6.5.1 MinGW64的终端,不要混用MSVC环境,然后执行以下配置命令(手动指定SQLite库路径,避免CMake误判):
qt-cmake -G Ninja C:\Qt\6.5.1\Src\qtbase\src\plugins\sqldrivers ^ -DCMAKE_INSTALL_PREFIX=C:\Qt\6.5.1\mingw_64 ^ -DCMAKE_INCLUDE_PATH=C:\libs\sqlite-amalgamation-3420000 ^ -DCMAKE_LIBRARY_PATH=C:\libs\sqlite-amalgamation-3420000 ^ -DFEATURE_system_sqlite=ON ^ -DSQLITE_LIBRARY=C:\libs\sqlite-amalgamation-3420000\libsqlite3.a ^ -DSQLITE_INCLUDE_DIR=C:\libs\sqlite-amalgamation-3420000
3. 重新编译安装插件
依次执行:
cmake --build . cmake --install .
注意查看编译日志,确认CMake正确找到了SQLite的库和头文件,没有“找不到sqlite”相关的警告。
4. 项目中正确链接SQLite
- 如果用QMake,在
.pro文件中添加:LIBS += -lsqlite3 - 如果用CMake,在
CMakeLists.txt中添加:find_package(SQLite3 REQUIRED) target_link_libraries(你的项目名称 PRIVATE SQLite::SQLite3) - 运行时必须把
sqlite3.dll放到项目的执行目录,或者加到系统PATH中。
额外排查点
- 检查CMake配置阶段的输出,确认
Found SQLite3: ...的路径指向你生成的libsqlite3.a - 确认项目编译时,链接器确实找到了
libsqlite3.a,没有遗漏链接参数
内容的提问来源于stack exchange,提问作者Nikita Novikov
相关产品推荐
相关产品推荐

