1

我已经下载了 LUA 5.1 和 lsqlite3 源代码,并轻松准备了一个 Visual C++ express 项目,该项目可以正常编译和运行,并添加了 SQLite3 和 lsqlite3(只有几个 .c 和 .h 文件)。

我使用 lua.c 作为其“主要”功能的入口点,并且我已从 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”,但如果它对我的目的有用,也不知道如何使用它。

4

2 回答 2

0

我想我明白了。

添加“LUA_API int luaopen_lsqlite3(lua_State *L);” 到 lua.h

在文件 lua.c 中,在函数 "static int pmain (lua_State *L)" 行 "luaL_openlibs(L); /* 打开库 */" 后添加行 "luaopen_lsqlite3(L);"

将所有 lsqlite3 示例文件中的第一行从 "require("lsqlite3")" 更改为 "require("sqlite3")"

完成这 3 点后,示例脚本运行良好,或者至少没有错误。

于 2013-01-16T01:44:54.730 回答
0
  1. 加载 sqlite3 源并构建它们 -> sqlite3.dll 将是你的。

  2. 加载 lsqlite 源并构建它们(这将需要 sqlite3.a 和一些头文件)-> 你将获得 lsqlite3.dll。

  3. 将 lsqlite3.dll 放到你的 Lua clibs 目录 (\Lua\5.1\clibs)

  4. 尝试这个:

    require("lsqlite3")
    local db = assert( sqlite3:open_memory() )
    
于 2013-01-22T22:30:46.747 回答