2016-08-15 47 views
1

我想將一個Lua腳本加載到我的C++應用程序中並運行它。 我決定使用LuaJIT來利用它的FFI庫。 但我有這個奇怪的問題,在我的Lua腳本不能看到我在我的C++代碼中定義的函數符號,我得到在運行我的應用程序此錯誤:如何將函數從C++可執行文件暴露給LuaJIT

未定義的符號:test_func_a

下面

是我的C++和Lua代碼:

// C++ //

#include <stdlib.h> 
#include <stdio.h> 
#include <assert.h> 
#include <lua.hpp> 

#ifdef __cplusplus 
    extern "C" { 
#endif 

void test_func_a (void) { 
    printf ("hello\n"); 
} 

#ifdef __cplusplus 
    } 
#endif 

int main (int argc, char** argv) { 
    lua_State *lua = luaL_newstate(); 
    assert (lua); 
    luaL_openlibs (lua); 
    const int status = luaL_dostring (lua, lua_script_content); 

    if (status) 
    printf ("Couldn't execute LUA code: %s\n", lua_tostring (lua, -1)); 

    lua_close (lua); 

    return 0; 

}

// //的Lua

local ffi = require('ffi'); 

ffi.cdef[[ 
    void test_func_a (void); 
]] 

ffi.C.test_func_a() 

默認GCC將導出所有的符號,怎麼來luajit沒有看到他們?

+0

你是如何編譯你的C++文件? –

回答

1

使用:

extern "C" __declspec(dllexport) void test_func_a (void) {printf ("hello\n");} 
+0

添加更多描述即將發生的事情。你修好了什麼,爲什麼。 –