You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:

  1. 打开MinGW终端,进入lsqlite3的源码根目录
  2. 编译生成静态库(推荐静态链接到你的项目,避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:06:04