C 创建 Lua 调用库

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 动态与静态链接库

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容