在openwrt开发中我们经常会使用到lua语言,lua语言的优越性就不用我多说了,百度上有很多相关介绍。本文的重点在于讲解如何使用C语言调用lua,至于lua调用C就很简单了,教程也很多。
现在有这样一个hello.lua 文件:
function add(x, y) return x + y; end
然后我们写一个C程序来调用它:
#include <stdio.h> #include <lua.h> #include <lauxlib.h> #include <lualib.h> //调用lua中的add函数 int call_lua_add(lua_State *L) { lua_getglobal(L, "add"); //获取add函数 lua_pushnumber(L, 1); //第一个操作数入栈 lua_pushnumber(L, 3); //第二个操作数入栈 lua_pcall(L, 2, 1, 0); //调用函数,2个参数,1个返回值 int sum = (int)lua_tonumber(L, -1); //获取栈顶元素(结果) lua_pop(L, 1); //栈顶元素出栈 return sum; } int main() { lua_State *L = luaL_newstate(); //新建lua解释器 luaL_openlibs(L); //载入lua所有函数库 luaL_dofile(L, "hello.lua"); //执行"Test.lua"文件中的代码 printf("%d\n", call_lua_add(L)); lua_close(L); //释放 return 0; }
使用如下命令进行编译:
gcc -o call-lua call-lua.c -I/usr/local/include/ -L/usr/local/lib/ -llua -lm -ldl
前提是你已经安装好lua的环境。
运行最终结果:
作者:mleaf
链接:http://www.mleaf.org/2017/06/02/openwrt-%e4%b8%ad%e4%bd%bf%e7%94%a8c%e8%b0%83%e7%94%a8lua%e8%84%9a%e6%9c%ac/
来源:mleaf的博客
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。