使用SQLite进行C++和Lua编程。

我有一个带有 Lua 绑定的 C++ 程序。一切正常,但如果我添加 SQLite,我的脚本就会停止工作(甚至空脚本,仅有一个 print 语句也无法运行)。

在我的 C++ 代码中,我调用:

luaL_openlibs( this->state );
luaopen_lsqlite3(this->state); /* sqlite */

如果我这样做,Lua 脚本将不再起作用。

如果我删除(注释掉)luaopen_lsqlite3,脚本仍然正常工作(但显然没有 SQLite)。这是什么问题?或者我需要调用什么?我正在使用 http://lua.sqlite.org/index.cgi/index

点赞
用户1130231
用户1130231

我发现一种解决方法,需要编辑 Lua 源代码。


lualib.h中添加

#define LUA_SQLLIBNAME  "lsqlite3"
LUAMOD_API int (luaopen_lsqlite3)(lua_State *L);

在下面这段代码之前:

LUALIB_API void (luaL_openlibs) (lua_State *L);

linit.h中将 {LUA_SQLLIBNAME,luaopen_lsqlite3} 添加到 loadedlibs 数组中。你就可以得到:

static const luaL_Reg loadedlibs[] = {
  {"_G", luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_COLIBNAME, luaopen_coroutine},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_BITLIBNAME, luaopen_bit32},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_DBLIBNAME, luaopen_debug},
  {LUA_SQLLIBNAME, luaopen_lsqlite3 },
  {NULL, NULL}
};

现在,如果你调用 luaL_openlibs,在调用 local sqlite3 = require("lsqlite3") 之后,SQLite 支持就会存在于你的代码中。

2015-08-23 08:27:26