lua中如何调用动态库
在Lua中调用动态库,需要使用C语言中的动态链接库相关函数,并在Lua中调用这些函数。
具体步骤如下:
- 在C语言中,使用
dlopen函数打开动态链接库,获取一个句柄。
void *handle = dlopen("libmylib.so", RTLD_LAZY);
if (!handle) {
printf("Failed to open library: %s\n", dlerror());
return 1;
}
- 使用
dlsym函数获取动态库中的函数指针。
void (*myfunc)() = dlsym(handle, "myfunc");
if (!myfunc) {
printf("Failed to get function: %s\n", dlerror());
dlclose(handle);
return 1;
}
- 在Lua中,使用
ffi.C调用动态库中的函数。需要先使用ffi.load加载动态库。
local ffi = require("ffi")
local mylib = ffi.load("libmylib.so")
ffi.cdef[[
void myfunc();
]]
mylib.myfunc()
完整示例代码:
// libmylib.c
#include <stdio.h>
void myfunc() {
printf("Hello from myfunc()\n");
}
# 编译动态库
gcc -shared -fPIC -o libmylib.so libmylib.c
-- test.lua
local ffi = require("ffi")
local mylib = ffi.load("libmylib.so")
ffi.cdef[[
void myfunc();
]]
mylib.myfunc()
# 运行Lua脚本
luajit test.lua
输出:
Hello from myfunc()
原文地址: https://www.cveoy.top/t/topic/byk5 著作权归作者所有。请勿转载和采集!