我已经下载了LUA 5.1和lsqlite3源代码,并轻松准备了一个编译并运行良好的Visual C ++ express项目,并添加了SQLite3和lsqlite3(只需几个.c和.h文件)。
我使用lua.c作为其“main”函数的入口点,我已经从visual studio项目luac.c文件中删除了。当我启动.exe时,它会向我显示一个解析基本lua命令的命令行(例如print("hello world")
),这样可以正常工作。
启动一个标准的Lua(5.1)示例也可以正常工作(例如键入dofile("bisec.lua")
),但是如果我从lsqlite3尝试一个.lua文件,则会出现以下错误:
statement.lua:1: module 'lsqlite3' not found:
no field package.preload['lsqlite3']
no file '.\lsqlite3.lua'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\lua\lsqlite3.lua'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\lua\lsqlite3\init.lua'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\lsqlite3.lua'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\lsqlite3\init.lua'
no file 'C:\Program Files (x86)\Lua\5.1\lua\lsqlite3.luac'
no file '.\lsqlite3.dll'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\lsqlite3.dll'
no file 'C:\Projects\lua-5.1.5_lsqlite3_integration\lua_5.1_lsqlite3_int
egration\Debug\loadall.dll'
stack traceback:
[C]: in function 'require'
statement.lua:1: in main chunk
[C]: in function 'dofile'
stdin:1: in main chunk
[C]: ?
如何注册lsqlite3包? 我找到了一个我怀疑与此有关的文件:“lsqlite3-0.8-1.rockspec” 但是,如果它对我的目的有用,也不会如何使用它,我不会这样做。
答案 0 :(得分:0)
我想我明白了。
添加“LUA_API int luaopen_lsqlite3(lua_State * L);”到lua.h
在文件lua.c中,在函数“static int pmain(lua_State * L)”之后的行“luaL_openlibs(L); / * open libraries * /”中添加行“luaopen_lsqlite3(L);”
将所有lsqlite3示例文件中的第一行从“require(”lsqlite3“)”更改为“require(”sqlite3“)”
执行这3点后,示例脚本运行正常,或者至少没有错误。
答案 1 :(得分:0)
加载sqlite3源并构建它们 - > sqlite3.dll将是你的。
加载lsqlite源并构建它们(需要sqlite3.a和一些标题) - >你会得到lsqlite3.dll。
将lsqlite3.dll放入Lua clibs目录(\ Lua \ 5.1 \ clibs)
试试这个:
require("lsqlite3")
local db = assert( sqlite3:open_memory() )