2012-09-01 60 views
2

我想用minigw在windows上編譯瘋狂的python。命令如下:在windows上編譯瘋狂的python

gcc.exe -shared -DLUA_BUILD_AS_DLL src\luainpython.c src\pythoninlua.c liblua.a 
libpython27.a -IC:\Python27\include -IC:\LUA\include 

這給了我未定義的引用錯誤。但我無法找到任何lua api更改參考,我應該替換這些參數。

src\luainpython.c:350:14: warning: 'LuaObject_Type' redeclared without dllimport 
attribute after being referenced with dll linkage [enabled by default] 
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x7a): undefined 
    reference to `lua_strlen' 
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x557): undefine 
    d reference to `_imp__LuaObject_Type' 
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0xc3a): undefine 
    d reference to `luaL_getn' 
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x1036): undefin 
    ed reference to `luaopen_loadlib' 
c:/mingw32/bin/../lib/gcc/i686-w64-mingw32/4.7.1/../../../../i686-w64-mingw32/bi 
    n/ld.exe: C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o: bad reloc address 0x0 in s 
    ection `.data' 
collect2.exe: error: ld returned 1 exit status 
+0

的-DLUA_BUILD_AS_DLL選項是不恰當的。它只應該在你構建Lua時使用,而不是在編譯*使用* Lua的代碼時使用。 –

+0

@HansPassant我確實刪除了LUA_BUILD_AS_DLL,並設法修正了大部分錯誤,但它無法正常工作。稍後會再看更多。 – UldisK

回答

2

最初的Lunatic-Python代碼庫有許多已知的問題 - 你在上面運行的構建問題就是其中之一。不幸的是,它似乎並不像原來的作者仍然維持這個項目 - 如果最後修改日期here是任何跡象。

如果你仍然試圖讓它起作用,我會強烈推薦使用最新的叉子之一。特別是,Lunantic-Python fork at github合併了我的許多修復改進。

回到您的問題,許多未定義的引用是由於標頭中的不正確前向聲明或由於定義的宏導致前向聲明不正確。例如,原來的luainpython.h包含:

PyAPI_DATA(PyTypeObject) LuaObject_Type; 

在Windows中,預處理之後擴展到:

extern __declspec(dllimport) PyTypeObject LuaObject_Type; 

換句話說,鏈接器的去嘗試,並從導入庫找到LuaObject_Type定義。這當然是錯誤的,因爲這種新類型是由luainpython.c中的瘋子創建和實現的。相反,正確的原型應該是extern PyTypeObject LuaObject_Type;

另請注意,在Lua5.1中不推薦使用luaopen_loadlib,這解釋了您正在獲取的其他未定義參考。事實上,以下的瘋子,Python的使用情況進行完全棄用:

luaopen_base(L); 
luaopen_table(L); 
luaopen_io(L); 
luaopen_string(L); 
luaopen_debug(L); 
luaopen_loadlib(L); 

,並應與此點來代替:

luaL_openlibs(L); 
+1

最後,我剛剛在我的項目中繼續前進,沒有發生瘋狂的python,但鏈接和解釋將來可能會對我有所幫助,所以感謝您的回答。 :) – UldisK