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
复制代码 要求- libffi - 一个可移植的外部函数接口库。
- Lua 5.1 或更高版本(经测试到 5.4 及以上版本)。
Ubuntu
- 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
提取码下载:
|