如何在Windows环境下编译lsqlite3并链接至现有C++项目
编译工具选择
lsqlite3是C语言编写的SQLite的Lua绑定库,必须使用GCC(你当前使用的MinGW GCC)编译,Lua本身是脚本解释器,不具备编译C代码的能力。
前置依赖准备
- 安装MinGW版本的Lua开发库:lua.h、lauxlib.h属于Lua的开发头文件,不要使用MSVC编译的Lua for Windows版本,会和MinGW编译的代码不兼容。安装完成后记录下头文件目录(安装路径下的include文件夹)和库文件目录(安装路径下的lib文件夹,内含liblua.a等静态库文件)。
- 提前编译好MinGW版本的SQLite3开发库,确保有sqlite3.h头文件和libsqlite3.a库文件。
手动编译lsqlite3(跳过自带不兼容的Makefile)
你当前遇到的报错是因为自带的Makefile默认调用luarocks,Windows MinGW环境下luarocks的路径、参数规则和Linux不兼容,直接手动编译即可,不需要用自带的Makefile:
- 打开MinGW终端,进入lsqlite3的源码根目录
- 编译生成静态库(推荐静态链接到你的项目,避免dll依赖问题):
gcc -c lsqlite3.c -o lsqlite3.o -I"替换为你的Lua头文件路径" -I"替换为你的SQLite3头文件路径" -DLUA_LIB ar rcs liblsqlite3.a lsqlite3.o
如果需要动态库,执行以下命令生成dll:
gcc -shared lsqlite3.c -o lsqlite3.dll -I"替换为你的Lua头文件路径" -I"替换为你的SQLite3头文件路径" -L"替换为你的Lua库文件路径" -L"替换为你的SQLite3库文件路径" -llua -lsqlite3 -DLUA_LIB
编译完成后把生成的liblsqlite3.a放到你能找到的目录,lsqlite3.h如果单独有的话也一起存放。
修改项目CMakeLists适配Windows环境
原项目的CMake配置是针对Linux环境写的,Windows下需要调整依赖查找和链接规则:
find_package(sqlite3 REQUIRED) # 手动添加Lua和lsqlite3的头文件路径,替换为你本地的实际路径 include_directories(${SQLITE3_INCLUDE_DIRS} "C:/Lua/include" "C:/lsqlite3") # 手动添加Lua和lsqlite3的库文件目录,替换为你本地的实际路径 link_directories("C:/Lua/lib" "C:/lsqlite3") SET(CMAKE_CXX_FLAGS_RELEASE " -DSQLITE3 ${CMAKE_CXX_FLAGS_RELEASE}") SET(CMAKE_CXX_FLAGS_DEBUG " -DSQLITE3 ${CMAKE_CXX_FLAGS_DEBUG}") # 把原来的全局链接flag替换为针对目标的链接配置,xxx替换为你项目的生成目标名 target_link_libraries(xxx PRIVATE ${SQLITE3_LIBRARIES} lsqlite3 lua)
注意:CMake配置里的路径请使用正斜杠
/或者双反斜杠\\,不要使用单反斜杠,否则会被识别为转义字符导致路径错误。
问题排查
- 如果编译时提示找不到lua.h、lauxlib.h,检查头文件路径是否正确,路径不要包含中文或空格
- 如果链接时提示Lua、SQLite3相关的未定义符号,检查所有依赖库的编译架构是否一致(全部32位或全部64位),版本是否匹配。
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

