如何使用 LuaJIT 定义 C 函数?

这样做:

local ffi = require "ffi"

ffi.cdef[[
  int return_one_two_four(){
    return 124;
  }
]]

local function print124()
  print(ffi.C.return_one_two_four())
end

print124()

会抛出下面的错误:

Error: main.lua:10: cannot resolve symbol 'return_one_two_four': The specified procedure could not be found.

我对 C 有一定的了解,并想要利用它的一些优势来做一些事情,但我在 LuaJIT 的 FFI 库中找不到很多例子。似乎 cdef 仅用于函数声明而不是定义。如何在 C 中定义函数,然后在 Lua 中使用它们?

点赞
用户734069
用户734069

LuaJIT 包含一个用于识别 C 声明的识别器,但它并不是一个完整的 C _编译器_。其 FFI 系统的目的是能够定义一个特定的 DLL 导出了哪些 C 函数,以便通过 ffi.load 加载该 DLL 并允许您从 Lua 中调用这些函数。

LuaJIT 可以通过 DLL 基于 C 的接口加载预编译代码,但它本身不能编译 C。

2018-12-16 21:17:42
用户6038447
用户6038447

从技术上讲,只要代码足够简单,那么你想做的事情不会太麻烦。你可以使用类似于https://github.com/nucular/tcclua的工具(tcc是非常小的,你甚至可以轻松地部署它),这是一个非常好的方式,可以同时拥有最好的两个世界,将它们放在一个单一的软件包中 :)

2020-06-21 05:46:59