【问题标题】:C++ and Lua with SQLiteC++ 和 Lua 与 SQLite
【发布时间】:2015-08-23 16:27:26
【问题描述】:

我有带有 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

【问题讨论】:

    标签: c++ sqlite lua


    【解决方案1】:

    我找到了一个解决方案,需要编辑 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,在 Lua 中调用 local sqlite3 = require("lsqlite3") 后,SQLite 支持将出现在您的代码中

    【讨论】:

    • 太棒了,恰到好处。谢谢。
    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2014-07-16
    • 2011-04-18
    相关资源
    最近更新 更多