美文网首页
C 创建 Lua 调用库

C 创建 Lua 调用库

作者: wjundong | 来源:发表于2020-12-17 09:43 被阅读0次

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。比如通过调用 C/C++ 编写的动态库可以使 Lua 执行起来非常高效。下面演示如何编写 C/C++ 动态库并在 Lua 中调用。

  • 安装 Lua 和 Lua-dev
    在下面安装包中 lua5.3 提供了解释器, 而 liblua5.3-dev 提供了 C/C++ 编译环境的头文件和链接库

    sudo apt-get install lua5.3
    sudo apt-get install liblua5.3-dev
    
  • hello.c 文件

    #include "lua.h"
    #include "lauxlib.h"
    #include <stdio.h>
    
    int say_hello()
    {
        printf("Hello Lua\n");
    
        return 1;
    }
    
    /* 固定写法 luaopen_xxxx (xxxx 为库名称), Lua require 时调用 */
    int luaopen_hello(lua_State *L) 
    {
        /* 注册 Lua 函数 */
        luaL_Reg fns [] = {
            {"sayHello", say_hello},
            {NULL, NULL}
        };
    
        /* 创建 Lua 库 */
        luaL_newlib(L, fns);
    
        return 1;
    }
    
  • Makefile 文件

    LIBFLAG= -shared -fpic
    
    hello.so: hello.c
        gcc hello.c -o hello.so $(LIBFLAG) -I/usr/include/lua5.3 -llua5.3
    
  • test.lua 文件

    package.cpath = "./?.so"
    
    local hello = require "hello"
    
    hello.sayHello()
    
  • 运行结果

    $ make
      gcc hello.c -o hello.so -shared -fpic -I/usr/include/lua5.3 -llua5.3
    $ lua test.lua
      Hello Lua
    

说明: 编译参数 -shared -fpic 告诉编译器生成的是动态链接库, 详情参考 C 动态与静态链接库

相关文章

  • C 创建 Lua 调用库

    Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用...

  • 对Lua ,C,C#互相调用的理解

    几种情况讨论 C调用Lua C调用C# C#调用C C#调用Lua Lua调用C Lua调用C# Lua调用C 本...

  • Lua C API

    C API 云风Blog:Lua C API 的正确用法 C读取和调用Lua文件的库:lua.h, lauxlib...

  • Unity3D C#和Lua互相调用

    原理:c#调用lua, 是c# 通过P/Invoke方式调用了lua的dll(一个C库),然后这个dll执行了lu...

  • C#与Lua交互过程和原理

    C#与Lua交互过程: C# Call Lua :由C#文件先调用Lua解析器底层dll库(由C语言编写),再由d...

  • 试用FFI

    FFI库,允许从纯Lua代码调用外部C函数,使用C数据结构。FFI库最大限度的省去了使用C手工编写繁重的Lua/C...

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

  • 面试小结(二) lua与C#的交互及一些注意事项

    简单的来说,lua调用C#的过程是lua-C-C#。C#调用lua的过程是C#-C-lua。 注意事项: 2.lu...

  • 鹅厂实习周记(三)之Lua 使用C函数生成的so动态链接库

    Lua是可以调用C函数的,将c函数生成so库就可以动态链接进lua中调用啦。但是觉得坑还是挺多的。主要原因: 生成...

网友评论

      本文标题:C 创建 Lua 调用库

      本文链接:https://www.haomeiwen.com/subject/ryiagktx.html