在luajit ffi中何时以及在哪里加载库?

我正在将一个 C++ 引擎和 Lua 做一个包装器,我使用 LuaJIT,并且因此我使用 ffi 作为这两者之间的“包装器”,由于引擎有许多不同的部分,我想将它们分成文件,然后进行要求,然而,在阅读了一些关于 LuaJIT 的内容之后,我发现对于外部库,您必须加载库,因此我提出了这个问题:我应该在何时何地加载库?在“黏合”代码(统一所有模块的代码)中?在每个人中?或者将其保留为单个文件会更好? 另外,为了确定这一点,加载库有多慢?

点赞
用户98107
用户98107

你可以创建一个'core'模块来加载库:engine/core.lua

local ffi = require'ffi'

local C = ffi.load('engine') -- 加载 .so/.dll

ffi.cdef[[
/* 在这里放置公共函数/类型定义。 */
]]

-- 返回本地模块句柄
return C

然后,您将为引擎的每个部分创建一个模块:engine/graphics.lua

local ffi = require'ffi' -- 仍需加载ffi

local C = require'engine.core'

-- 加载其他依赖部分。
-- 如果此模块使用引擎的其他部分的类型,则必须在 ffi.cdef 调用之前在此处定义/加载它们。
require'engine.types'

ffi.cdef[[
/* 在此定义此部分引擎的函数/类型。 */
]]

local _M = {}

--将粘合函数添加到_M模块中。
function _M.glue_function()
  return C.engine_function()
end

return _M

'engine.core'模块中的代码将只执行一次。将引擎分成部分的最大问题是处理交叉类型依赖关系。为了解决这个问题,在 'engine.core'模块中添加“typedef struct name name;”来定义在多个部分中使用的类型。

2013-05-20 23:31:42