成功命令:

# cc -o my_math.so my_math.c -Wall -llua -ldl -lm -shared

# lua callc.lua


过程中出现的问题:

1. 无法编译过去,“ warning: implicit declaration of function ‘luaL_register’ [-Wimplicit-function-declaration] ”。由于 luaL_register()在Lua 5.2中已经改变了。要使用luaL_newlib()来代替。


代码下载:

http://pan.baidu.com/share/link?shareid=219097&uk=3489955754


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 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;
}


1
2
3
4
5
6
// callc.lua
  
my_math = require("my_math")
  
print(my_math.my_sin(3.14))
print(my_math.my_cos(3.14))