前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下lua安装以及和c的交互

Linux下lua安装以及和c的交互

作者头像
渴望飞翔的猪
发布2022-07-17 10:44:40
7840
发布2022-07-17 10:44:40
举报
文章被收录于专栏:葵花宝典007

lua安装,与c交互的过程记录

lua安装 在此我的机器环境是cenos 6.8 我安装的是lua5.1.4版本

  • 安装lua编译的相关依赖 yum -y install readline-devel ncurses-devel tar -zxvf lua-5.1.4.tar.gz cd lua-5.1.4 make linux test make install

至此lua模块安装完成,开始和c语言的交互之旅行吧

网上很多介绍c和lua交互的,但是在linux下面的编译介绍却没找到,在此自己记录下,也方便大家查看

  • 在lua模块安装完成后,可以用命令find / -name ‘lua.h’ 查看lua.h的位置,网上很多人是用–profix指定位置,在此我都是默认安装,发现默认其实已经是在/usr/local/bin 等系统目录下,没有其他配置,可直接使用,很方便。不需要像很多人说的那样多此一举,每次总是百度来百度去反而消磨很多精力。

1实现自己的第一个c调用C的例子 test.lua

代码语言:javascript
复制
print("lua script test.lua have been load--")

function showinfo()
    print ("hello world")
end

function lua_add(a,b)
    return a+b
end

function lua2c_add(a,b)
    return add(a,b)
end

test.c

代码语言:javascript
复制
#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main(int argc, char *argv[])
{
    lua_State *L = lua_open();
    L = luaL_newstate();

    luaL_openlibs(L);
    luaL_dofile(L, "test.lua");
    lua_getglobal(L,"showinfo");
    lua_pcall(L,0,0,0);


    lua_getglobal(L,"lua_add");
    lua_pushinteger(L,1);
    lua_pushinteger(L,5);
    lua_pcall(L,2,1,0);

    printf("lua add function return val is %d \n",lua_tointeger(L,-1));

    lua_close(L);

    return 0;
}
  • 编译命令 gcc test.c -o test -llua -lm -ldl
这里写图片描述
这里写图片描述

2实现自己的第一个lua调用C的例子 c_lua.c

代码语言:javascript
复制
#include<stdio.h>
#include<lua.h>
#include<lualib.h>
#include<lauxlib.h>
static int add(lua_State* L)
{
    int a = lua_tointeger(L,1);//获取函数参数
    int b = lua_tointeger(L,2);

    lua_pushinteger(L,a+b);
    return 1;
}

int main()
{
    lua_State *L = luaL_newstate();
    //lua_State *L = Lua_open()

    luaL_openlibs(L);
    lua_register(L,"add",add);//注册add函数,多个函数可以使用luaL_register注册,该函数使用结构体的方式

    luaL_dofile(L,"test.lua");//加载lua文件,建立lua所有变量(包括函数)的全局表
    lua_getglobal(L,"lua2c_add");// 在lua的全局表查找lua2c_add函数,并压入栈底
    lua_pushinteger(L,3);//push函数参数1
    lua_pushinteger(L,4);//push 函数参数2
    lua_pcall(L,2,1,0);//执行栈中的函数,2代表俩个参数,1代表一个返回值,0代表没有错误处理函数

    int result = lua_tointeger(L,-1); //从栈中取回返回值
    lua_pop(L,1); //清栈,此时只有一个返回值

    printf("result = %d\n",result);

    lua_close(L);//关闭lua环境
    return 0;
}
  • 编译命令 gcc c_lua.c -o app -llua -lm -ldl
这里写图片描述
这里写图片描述

Ok啦,经历好几天的迷雾,终于在linux跑起来了,还不太会写博客,就此小小记录下,也希望能带给一些和我一样有迷惑的朋友帮助

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lua安装,与c交互的过程记录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档