lua 5.2 去掉了luaL_register功能,不能直接注册函数到一个全局table中了。
网上找了很多文章都是要导出到库,再引用库。
// my_math.c
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <math.h>
#include <stdio.h>
static int my_math_sin (lua_State *L) {
lua_pushnumber(L, sin(luaL_checknumber(L, 1)));
return 1;
}
static int my_math_cos (lua_State *L) {
lua_pushnumber(L, cos(luaL_checknumber(L, 1)));
return 1;
}
static const luaL_Reg mathlib[] = {
{"my_cos", my_math_cos},
{"my_sin", my_math_sin},
{NULL, NULL}
};
/*
** Open my_math library
*/
LUALIB_API int luaopen_my_math (lua_State *L) {
luaL_newlib(L, mathlib);
return 1;
}
LUALIB_API 是导出导入函数或extern,看是否指定 LUA_BUILD_AS_DLL
// callc.lua
my_math = require("my_math") --my_math 是一个dll或so,由下面的.c生成
print(my_math.my_sin(3.14))
print(my_math.my_cos(3.14))
如果要实现luaL_register,可以不导出dll,改用luaL_requiref在c里面注册这个load方法
luaL_requiref(L,"my_math",luaopen_my_math,0);
这样就不用导出dll了,直接在exe里就行了