zoukankan      html  css  js  c++  java
  • 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
    

  • 相关阅读:
    HashMap 的实现原理(1.8)
    HashMap 的实现原理(1.7)
    Java面试总结 -2018(补录)
    在java中写出完美的单例模式
    ArrayList实现原理分析
    Ngigx+Tomcat配置动静分离,负载均衡
    微信小程序——常用快捷键【四】
    Linux服务器下安装vmware虚拟机
    微信小程序——部署云函数【三】
    微信小程序——安装开发工具和环境【二】
  • 原文地址:https://www.cnblogs.com/blueberryzzz/p/9557256.html
Copyright © 2011-2022 走看看