LuaJIT中ffi.typeof模板使用失败,求错误原因解析
LuaJIT FFI 代码加载错误原因解析
错误现象
运行代码时出现加载错误:
dofile(test.lua) failed:test.lua:23: declaration specifier expected near '$'
环境为 macOS 12.2.1、LuaJIT 2.1.0-beta3。
错误原因
代码中尝试在ffi.typeof()的类型字符串里用$作为类型占位符,LuaJIT的ffi.typeof()函数并不支持这种占位符语法。LuaJIT无法识别$作为类型替换标记,因此抛出语法解析错误。
解决方案
有两种修正方式:
方式一:动态拼接类型字符串
使用string.format()动态替换类型名称,修改obj_wrapper函数:
local obj_wrapper = function (type_str) return ffi.typeof(string.format("struct { %s *val; finalizer fnlz; }", type_str)) end
方式二:静态指定类型
如果不需要动态生成类型,直接使用注释中的静态写法即可:
local my_ltype = ffi.typeof("struct { my_t *val; finalizer fnlz; }")
内容的提问来源于stack exchange,提问作者Masson
相关产品推荐
相关产品推荐

