我可以在 LuaJIT 中使用 ffi.load 加载多个库吗?

Can i load multiple libraries with ffi.load in LuaJIT?

LuaJIT 是否可以同时加载多个库ffi.load?

这样的东西可行吗?

local ffi = require("ffi")
local bor = require("bit").bor
ffi.cdef([[
   // C bindings from each library!
]])
return ffi.load(bor("lib1", "lib2", "lib3"))

由于 LuaJIT FFI 库的工作方式,您无法真正将多个库导入单个用户数据。 您唯一可以轻松做的就是在受保护的调用中调用 userdata getter,因为 LuaJIT FFI 在未定义的符号上抛出错误,并循环要获取的每个库。

local function get(t, k)
  return t[k]
end

local superlib = setmetatable({
  ffi.load "a",
  ffi.load "b",
  ffi.load "c"
}, {
  __index = function (self, k, v)
    for _,l in ipairs(self) do
      local status, val = pcall(get, l, k)
      if status then
        return val
      end
    end
  end
})