我有一個需要加載到LuaInterface的Lua模塊(lpack)。我已經嘗試了幾個不同的項目配置,但我似乎無法弄清楚鏈接。構建Lua接口的Lua模塊
我得到的錯誤unresolved external symbol "void __stdcall lua_replace(struct lua_State *,int)" ([email protected]@[email protected]@[email protected]) referenced in function "int __stdcall l_unpack(struct lua_State *)" ([email protected]@[email protected]@@Z)
如果我在lua51.lib文件運行dumpbin /exports
,我能找到[email protected]@[email protected]@[email protected]
它匹配了什麼,我覺得在Dependency Walker中[email protected]@[email protected]@[email protected]
的lua51.dll,因此函數存在,但名稱不匹配。
我對連接器管理的這個級別不是很熟悉,所以這可能是我的一個簡單的錯誤。爲什麼lpack版本中的值與lua51.lib輸入文件的值不匹配?
更新
所有在lua51.dll和lua51.lib文件出口是__cdecl
和我LPACK項目已被設置爲__stdcall
。更改該屬性(在C/C++ - >高級 - >調用約定)修復了編譯問題,現在我有一個lpack.dll文件。
然而,當我試圖從LUA require('lpack')
文件失敗加載與The specified procedure could not be found.
打破在加載與LoadLibraryA該庫的LUA C代碼返回NULL和0x7F的的GetLastError函數()的代碼。
更新2
的lpack.dll文件我試圖將負載已經過時由於錯誤的輸出目錄,這樣固定的LoadLibrary失敗。接下來,GetProcAddress將失敗,但如果我按照Mud的建議將extern "C"
添加到lpack.c文件中的導出函數中,問題就解決了。
如果錯誤出現在'GetProcAddress()'中,但是它出現在'LoadLibrary()'中,這個名字會變得有意義。不幸的是,你不能真正使用C名稱,因爲.NET使用__stdcall(請參閱http://ttuxen.wordpress.com/2009/11/03/embedding-lua-in-dotnet/) – kyork 2012-08-08 20:42:55