• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

先查看一下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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【Cocos2dx 3.3 Lua】SpriteBatchNode和SpriteFrameCache使用发布时间:2022-07-22
下一篇:
LUA 日期处理发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap