Skip to content

Latest commit

 

History

History
100 lines (72 loc) · 2.91 KB

File metadata and controls

100 lines (72 loc) · 2.91 KB

lua-ffi

license PRs Welcome Issue Welcome Release Version Build Status Downloads visitors

外部函数接口(FFI)是一种机制,使一种编程语言编写的程序可以调用另一种语言实现或编译出的函数/服务。FFI 常用于调用二进制动态链接库中的能力。

lua-ffi 是一个面向 Lua 的可移植、轻量级 C FFI,基于 libffi 实现,目标是尽量兼容 LuaJIT FFI,并且由 C 语言从零实现。

特性

  • 可移植:可用于 Lua5.1、Lua5.2、Lua5.3 和 Lua5.4。
  • 轻量:使用 C 语言实现,体积很小,仅约 50KB。

示例

local ffi = require 'ffi'

ffi.cdef([[
    struct timeval {
        time_t      tv_sec;     /* seconds */
        suseconds_t tv_usec;    /* microseconds */
    };

    struct timezone {
        int tz_minuteswest;     /* minutes west of Greenwich */
        int tz_dsttime;         /* type of DST correction */
    };

    int gettimeofday(struct timeval *tv, struct timezone *tz);
    char *strerror(int errnum);
]])

local function strerror(errno)
    return ffi.string(ffi.C.strerror(errno))
end

local tv = ffi.new('struct timeval')

if ffi.C.gettimeofday(tv, nil) < 0 then
    print('gettimeofday fail:', strerror(ffi.errno()))
else
    print('tv.tv_sec:', tv.tv_sec, 'tv.tv_usec:', tv.tv_usec)
end

依赖

  • libffi - 一个可移植的外部函数接口库。
  • Lua 5.1 或更新版本(已测试到 5.4)。

构建

Ubuntu

sudo apt install -y liblua5.3-dev libffi-dev
git clone https://github.com/zhaojh329/lua-ffi.git
cd lua-ffi && mkdir build && cd build
cmake .. && sudo make install

OpenWrt

Languages  --->
    Lua  --->
        <>  lua-ffi............ A portable lightweight C FFI for lua5.1, based on libffi
        <>  lua-ffi-lua5.3..... A portable lightweight C FFI for lua5.3, based on libffi
        <*> lua-ffi-lua5.4..... A portable lightweight C FFI for lua5.4, based on libffi

致谢

本项目受以下仓库启发:

感谢这些项目作者的优秀工作。