先查看一下apt可获取的lua版本
我们选择lua5.1版本进行安装
安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境已经安装完毕。
2.安装lua相关的c库
lua环境安装完毕,但是此时在c中还不能对lua进行调用,或者生成供lua调用的c库,因为还没有安装lua的c库,通过下面这条命令安装相应的库文件和头文件
1
| sudo apt-get install lua5.1-0-dev
|
安装完毕后,我们写代码进行测试
2.1生成c的动态库供lua调用
新建一个c文件
写一个addc函数供lua调用
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
| #include <lua5.1/lualib.h> #include <lua5.1/lauxlib.h>
static int (lua_State *L) { int a,b,c; a = lua_tonumber(L,1); b = lua_tonumber(L,2); c = a + b; lua_pushnumber(L,c); return 1; }
static const struct luaL_Reg lib[] = { {"addc",addc}, {NULL,NULL} };
int luaopen_addlib(lua_State *L) { luaL_register(L,"testadd",lib); return 1; }
|
保存后对代码进行编译,生成lua用的so或dll库
1
| gcc addlib.c -fPIC -shared -o addlib.so
|
接下来进行lua对c调用的测试
调用成功
2.2在c中调用lua
创建printHello.lua文件
写一个PrintHelloLua函数
1 2 3
| function PrintHelloLua() print("hello !!!") end
|
创建luaFunctionTest.c文件
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
| #include <lua5.1/lualib.h> #include <lua5.1/lauxlib.h>
int main() { lua_State *luaEnv = lua_open(); luaopen_base(luaEnv); luaL_openlibs(luaEnv); if(!luaEnv) { return -1; }
int loadInfo = luaL_loadfile(luaEnv,"printHello.lua"); if(loadInfo) { return -1; } lua_pcall(luaEnv,0,0,0);
lua_getglobal(luaEnv,"PrintHelloLua"); lua_pcall(luaEnv,0,0,0); return 0; }
|
生成可执行文件,需要通过 -llua5.1指明使用的库文件
1
| gcc -o luaFunctionTest luaFunctionTest.c -llua5.1
|
运行可执行文件,成功输出 hello !!!