如何将函数从 C 可执行文件公开给 LuaJIT ffi
How to expose a function from C executable to LuaJIT ffi
我试图从同一可执行文件中调用 luajit ffi 中的 C 函数,但出现未定义符号错误。为什么?
main.c
#include <luajit-2.0/gcclauxlib.h>
#include <luajit-2.0/lua.h>
#include <luajit-2.0/lualib.h>
extern void my_func(void)
{
printf("f\n");
}
const char *lua = "local ffi = require(\"ffi\")\n"
"ffi.cdef[[\n"
"void my_func(void);\n"
"]]\n"
"ffi.C.my_func()\n";
int main(int argc, char **argv)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
if (luaL_dostring(L, lua)) {
printf("err: %s\n", lua_tostring(L, -1));
}
lua_close(L);
return 0;
}
运行 与:
$ gcc main.c -lluajit-5.1
$ ./a.out
输出:
err: [string "local ffi = require("ffi")..."]:5: /usr/lib/libluajit-5.1.so.2: undefined symbol: my_func
找到了。只需要用 -Wl,-E
编译
$ gcc main.c -Wl,-E -lluajit-5.1
$ ./out
f
我试图从同一可执行文件中调用 luajit ffi 中的 C 函数,但出现未定义符号错误。为什么?
main.c
#include <luajit-2.0/gcclauxlib.h>
#include <luajit-2.0/lua.h>
#include <luajit-2.0/lualib.h>
extern void my_func(void)
{
printf("f\n");
}
const char *lua = "local ffi = require(\"ffi\")\n"
"ffi.cdef[[\n"
"void my_func(void);\n"
"]]\n"
"ffi.C.my_func()\n";
int main(int argc, char **argv)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
if (luaL_dostring(L, lua)) {
printf("err: %s\n", lua_tostring(L, -1));
}
lua_close(L);
return 0;
}
运行 与:
$ gcc main.c -lluajit-5.1
$ ./a.out
输出:
err: [string "local ffi = require("ffi")..."]:5: /usr/lib/libluajit-5.1.so.2: undefined symbol: my_func
找到了。只需要用 -Wl,-E
编译$ gcc main.c -Wl,-E -lluajit-5.1
$ ./out
f