小编spa*_*paz的帖子

Lua 5.2:绑定和原始扩展:由于缺少LUA_GLOBALSINDEX,lua_register()会导致段错误

遍布网络的Lua教程显示使用lua_register()来公开扩展DLL中实现的函数:

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

static int pushlua3(lua_State *L)
{
  lua_pushnumber(L, 3);
  return 1;
}

int luaopen_lua3pushbinder(lua_State *L) 
{
  lua_register(L,"pushlua3", pushlua3);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

lua_register() 是宏而不是函数,这是来自5.2手册:

http://www.lua.org/manual/5.2/manual.html#lua_register

[-0,+ 0,e]

void lua_register (lua_State *L,
               const char *name,
               lua_CFunction f);
Run Code Online (Sandbox Code Playgroud)

将C函数f设置为全局名称的新值.它被定义为一个宏:

 #define lua_register(L,n,f) \
        (lua_pushcfunction(L, f), lua_setglobal(L, n))
Run Code Online (Sandbox Code Playgroud)

如果你单独使用这些函数,lua_pushcfunction很好,但是lua_setglobal崩溃了,因为它试图引用LUA_GLOBALSINDEX并且在运行时失败,而不是编译时.

那么现在实现lua_register()的正确方法是什么?

我有点想到,当Lua移动到5.2并重新使用LUA_GLOBALSINDEX和lua_register()表示的概念时,更改lua_register()以便它以"新"方式执行它是合理的.

那么,有没有Ubuntu没有为lua5.2选择的标题更新?我应该有一个指向的路径,/usr/include/lua5.2然后我不会遇到这个问题?我的盒子上只有一个Lua 5.1 include目录.

tnx可以提供任何帮助.

c lua

5
推荐指数
1
解决办法
674
查看次数

标签 统计

c ×1

lua ×1