我最近研究了 Lua,发现它非常好用。唯一令人烦恼的是其缺乏(标准)库。但是随着 JIT 编译器的推出,一个很好的 FFI C 接口也随之而来。
作为一个 Java 背景的开发者,我尽可能地避免使用 C,我的问题是:有没有人在 LuaJIT 上有一些经验,特别是 FFI 接口,对于一个几乎没有 C 知识的人来说设置库有多难?
对于一个几乎没有C语言知识的人来说,设置库有多困难?
非常容易。首先,您需要声明要使用的函数。然后,加载目标库并将其分配给Lua变量。使用该变量调用外部函数。
以下是使用C语言数学库中的powf
函数的示例。
local ffi = require("ffi")
-- Whatever you need to use, have to be declared first
ffi.cdef([[
double powf(double x, double y);
]])
-- Name of library to load, i.e: -lm (math)
local math = ffi.load("m")
-- Call powf
local n, m = 2.5, 3.5
print(math.powf(n, m))
powf
接受并返回float
而不是double
。有效的声明应该是:ffi.cdef([[ float powf(float x, float y); ]])
- jpcpowf
函数的参数应该是浮点数,而不是双精度浮点数。感谢你指出这一点。 - Diego Pino