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

1.安装lua环境

先查看一下apt可获取的lua版本

我们选择lua5.1版本进行安装

sudo apt install lua5.1

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

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


接下来进行lua对c调用的测试

调用成功

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

posted @ 2018-08-29 22:04  blueberryzzz  阅读(1581)  评论(0编辑  收藏  举报