C++调用的LUA脚本中加载其他库的问题

来源:互联网 发布:网络兼职招聘58同城 编辑:程序博客网 时间:2024/06/02 04:19

最近使用lua扩展c++程序,需要在调用的脚本中require另一个库,

static const luaL_reg lualibs[] =
{
{"package", luaopen_package},
LUA_EXTRALIBS{NULL, NULL}
};

  const luaL_reg* lib = lualibs;
for (; lib->func; lib++)
{
lib->func(L_);
lua_settop(L_, 0);
}

以这种方式加载package库之后,会出现错误,网上搜了一下说需要用另一个函数luaL_openlibs,看了

下头文件的声明,上面有一行open all previous libraries ,于是我想用之前的方法再试一次加载

所有的库,发现还是不行,肯定有什么地方弄错了,只能看luaL_openlibs函数源码了。

luaL_openlibs在linit.c中定义

LUALIB_API void luaL_openlibs (lua_State *L) {
  const luaL_Reg *lib = lualibs;
  for (; lib->func; lib++) {
    lua_pushcfunction(L, lib->func);
    lua_pushstring(L, lib->name);
    lua_call(L, 1, 0);
  }
}

原来二者的调用方式还是不相同的,为什么需要这样还有待研究。


原创粉丝点击