如何将函数从 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