网络上的 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;
}
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);
将 C 函数 f 设置为全局名称的新值。它被定义为一个宏:
#define lua_register(L,n,f) \ (lua_pushcfunction(L, f), lua_setglobal(L, n))
如果你单独使用这些函数, 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 包含目录。
tnx 为您提供任何帮助。