2013-03-31 32 views
3

我想簡單地使用下面的C++代碼如何鏈接LuaJIT與C++程序?

lua_State *state = luaL_newstate(); 

luaL_openlibs(state); 

lua_getglobal(state, "_G"); 
lua_pushstring(state, "print"); 
lua_pushnumber(state, 4.5); 
lua_call(state, 2, 1); 

lua_close(state); 

而且我得到了鏈接錯誤。上述所有的函數調用產生鏈接錯誤:

1>main.obj : error LNK2001: unresolved external symbol _luaL_newstate 
1>main.obj : error LNK2001: unresolved external symbol _lua_pushnumber 
1>main.obj : error LNK2001: unresolved external symbol _lua_call 
1>main.obj : error LNK2001: unresolved external symbol _lua_pushstring 
1>main.obj : error LNK2001: unresolved external symbol _luaL_openlibs 
1>main.obj : error LNK2001: unresolved external symbol _lua_getfield 
1>main.obj : error LNK2001: unresolved external symbol _lua_close 

頭包含與此代碼完成的:

extern "C" { 
    #include "lua.h" 
    #include "lauxlib.h" 
    #include "lualib.h" 
} 

我用MinGW的 「安裝」 LuaJIT,的mingw32-使BUILDMODE =靜態的。它給了我一個很好的「成功構建LuaJIT」。

我正在用VS2012編譯代碼。我已經設置了這樣的連接器:

其他庫直接命令:D:\ Programming \ LuaJIT Source \ LuaJIT-2.0.1 \ src 其他包含直接命令:D:\ Programming \ LuaJIT Source \ LuaJIT-2.0。 1 \ src

我在一臺windows7機器上,我在他們的github頁面上使用了最新的LuaJIT。

回答

1

的PIC一般情況下,你應該編譯使用相同的編譯器爲您的應用程序的所有存儲庫。 MinGW生成.a庫存檔,而MSVC通常輸出.lib存檔。

因此:使用MSVC重新編譯LuaJIT,將luajit.lib所在的路徑添加到鏈接器路徑中,並將luajit.lib添加到鏈接到應用程序的庫列表中。

+0

謝謝,這工作,我不得不添加此:#pragma評論(lib,「lua51.lib」) – user1830431

+0

嗨。我嘗試使用msvc編譯luajit,就像它在安裝說明中所說的那樣。但我總是失敗。我只是無法從.net命令提示符啓動msvcbuild命令。有誰知道我在做什麼錯? – SuperYegorius

0

您應該設置路徑LuaJIT庫,見下文 enter image description here