標籤:
參考:http://blog.163.com/[email protected]/blog/static/170499225201121504936823/
1、編輯C程式
vim luac.c
#include <stdio.h>#include <lua.h>#include <lualib.h>#include <lauxlib.h>LUALIB_API int luaopen_mylib(lua_State *L );//自訂函數static int my_add(lua_State *L) { int x = lua_tonumber(L,1); //第一個參數,轉換為數字 int y = lua_tonumber(L,2); //第二個參數,轉換為數字 int sum = x + y; lua_pushnumber(L, sum); return 1; //返回sum計算結果}static int showstr(lua_State *L) { //從lua中傳入的第一個參數 const char *str = lua_tostring (L, 1); printf ("c program str = %s\n", str); return 0;}//函數列表static struct luaL_reg funclist[] ={ {"add", my_add}, //my_add()函數,lua中訪問時使用名稱為add {"show", showstr}, //showstr()函數,lua中訪問時使用名稱為show {NULL, NULL} //最後必須有這個};//註冊函數列表方便擴充//我們編譯後的動態庫名稱為mylib.soLUALIB_API int luaopen_mylib(lua_State *L ){ luaL_register(L, "mylibfunc", funclist); //lua中使用mylibfunc.add訪問my_add函數 return 1;}#if 0//直接註冊一個函數LUALIB_API int luaopen_mylib(lua_State *L ){ lua_register(L, "add", my_add); return 1;}#endif
2、編輯lua程式
require "mylib"local sum = mylibfunc.add(3,9)print("sum=",sum)local str = mylibfunc.show("haha")
3、編譯C程式為動態庫
gcc luac.c -shared -fPIC -o mylib.so -I /usr/local/lj2/include/luajit-2.0/
4、運行測試lua調用C程式
lua t.lua輸出如下:sum= 12c program str = haha
lua調用c函數