簡體   English   中英

如何將 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM