ubuntu配置lua环境,并进行c与lua的相互调用

1.安装lua环境

先查看一下apt可获取的lua版本
1362861-20180829220129744-1073707536.png
我们选择lua5.1版本进行安装

sudo apt install lua5.1

安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境已经安装完毕。
1362861-20180829220142288-2070368045.png

2.安装lua相关的c库

lua环境安装完毕,但是此时在c中还不能对lua进行调用,或者生成供lua调用的c库,因为还没有安装lua的c库,通过下面这条命令安装相应的库文件和头文件

sudo apt-get install lua5.1-0-dev

安装完毕后,我们写代码进行测试

2.1生成c的动态库供lua调用

新建一个c文件

vim addlib.c

写一个addc函数供lua调用

#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>

static int addc(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[] =
{
    //左边是在lua中调用的函数名,右边是对应c函数
    {"addc",addc},
    {NULL,NULL}
};
//luaopen_xxx  这个xxx一定要和导出的库名一样,不然lua无法识别这个函数,无法进行函数的注册 
int luaopen_addlib(lua_State *L)
{
    //这里的"testadd"是在lua中调用库函数的全局变量名,不需要和库名addlib保持一致,但一般会用一样的名字
    luaL_register(L,"testadd",lib);
    //luaL_register(L,"addlib",lib);
    return 1;
}

保存后对代码进行编译,生成lua用的so或dll库

gcc addlib.c -fPIC -shared -o addlib.so

1362861-20180829220259774-1418263019.png
接下来进行lua对c调用的测试
1362861-20180829220310403-1732022538.png
调用成功

2.2在c中调用lua

创建printHello.lua文件

vim printHello.lua

写一个PrintHelloLua函数

function PrintHelloLua()
    print("hello !!!")
end

创建luaFunctionTest.c文件

vim luaFunctionTest.c
#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>

int main()
{
    //创建lua运行环境
    lua_State *luaEnv = lua_open();
    luaopen_base(luaEnv);
    luaL_openlibs(luaEnv);
    if(!luaEnv)
    {
        return -1;
    }

    //载入lua文件
    int loadInfo = luaL_loadfile(luaEnv,"printHello.lua");
    if(loadInfo)
    {
        return -1;
    }
    //执行lua文件
    lua_pcall(luaEnv,0,0,0);

    //调用PrintHelloLua函数
    lua_getglobal(luaEnv,"PrintHelloLua");
    lua_pcall(luaEnv,0,0,0);
    return 0;
}

生成可执行文件,需要通过 -llua5.1指明使用的库文件

gcc -o luaFunctionTest luaFunctionTest.c -llua5.1

运行可执行文件,成功输出 hello !!!

./luaFunctionTest

1362861-20180829220322098-495461865.png

转载于:https://www.cnblogs.com/blueberryzzz/p/9557256.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值