我想用C语言编写一些函数,以便在Lua中使用,而且我认为我能找到的最简单的方法就是使用LuaJIT的FFI。
我有一个C文件"add.c":
int add(int a, int b){
return a+b;
}我将其组装成"add.o“,并:
gcc -c add.c我制作"add.dll":
gcc - shared -o add.dll add.o最后,我尝试在LuaJIT中运行以下Lua代码:
local ffi =require("ffi")
local test=ffi.load("C:\\users\\quebe\\Desktop\\add")
ffi.cdef[[
int add(int a,int b);
]]
print(test.add(1,2))并得到:
luajit: test.lua:3: cannot load module 'C:\users\quebe\Desktop\add': %1 is
not a valid Win32 application.
stack traceback:
[C]: in function 'load'
test.lua:3: in main chunk
[C]: at 0x7ff72be120c0但我不知道如何将其解释为调试。
发布于 2017-08-13 11:21:49
根据这,在加载dll之前应该声明C函数:
local ffi =require("ffi")
ffi.cdef[[
int add(int a, int b)
]]
local test=ffi.load("C:\\users\\quebe\\Desktop\\add")增编:
此外,正如Egor Skriptunoff所述,应该将dll文件中的函数声明为导出函数。细节是在这中给出的,所以请回答。
发布于 2020-09-07 06:01:13
这听起来像你试图加载的dll有依赖的dll不能加载-通常是因为它们不在Windows搜索路径中。
解决办法:
发布于 2021-09-20 16:14:18
我在尝试做一些相关的事情时也犯了同样的错误,结果是LuaJIT二进制是用64位编译的,而我试图加载的.dll是用32位编译的。
https://stackoverflow.com/questions/45656120
复制相似问题