| Lua-ffi 适用于 Lua 的便携式轻量级 C FFI ,基于 libffi Lua-ffi 是适用于 Lua 的可移植 C FFI,基于 libffi,旨在与 LuaJIT FFI 基本兼容。
 
 外部函数接口 (Foreign Function Interface, FFI) 是一种机制,通过该机制,程序使用一种编程语言编写 可以调用例程或使用在另一个例程中编写或编译的服务。FFI 通常用于 在其中进行调用的上下文 Dynamic-Link Library. Lua-ffi 是适用于 Lua 的便携式轻量级 C FFI,基于 libffi,旨在实现大部分兼容性 使用 LuaJIT FFI,但用 C 语言从头开始编写。特征 例portable - 用于 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
要求复制代码void bool char short int long float double
int8_t int16_t int32_t int64_t uint8_t uint16_t uint32_t uint64_t
ino_t dev_t gid_t mode_t nlink_t uid_t off_t pid_t size_t ssize_t useconds_t suseconds_t blksize_t blkcnt_t time_t
Ubuntulibffi - 一个可移植的外部函数接口库。Lua 5.1 或更高版本(经测试到 5.4 及以上版本)。
 
 复制代码sudo apt install -y liblua5.3-dev libffi-dev
git clone 源码
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
 CFFI-Lua  :适用于 Lua 5.1+ 的便携式 C FFI
 
 
 PS:附件源码中包含 Lua-ffi, libffi,CFFI-Lua全部源码
 
  
 游客,本帖隐藏的内容需要积分高于 2 才可浏览,您当前积分为 0 提取码下载:
 
 
 
 
 
 
 
 
 |