2

minigw を使用して 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
4

1 に答える 1

2

元の Lunatic-Python コードベースには多くの既知の問題があります。上記で実行しているビルドの問題はその 1 つです。残念ながら、元の作成者がまだこのプロジェクトを維持しているようには見えません -ここにある最終更新日が何らかの兆候である場合.

まだ機能させようとしている場合は、最近のフォークのいずれかを使用することを強くお勧めします。特に、github の Lunantic-Python フォークには、私の修正による改善の多くが組み込まれています。

質問に戻ると、未定義の参照の多くは、ヘッダーでの不適切な前方宣言が原因であるか、前方宣言が正しくない原因となる定義されたマクロが原因です。たとえば、オリジナルには次のものluainpython.hが含まれます。

PyAPI_DATA(PyTypeObject) LuaObject_Type;

Windows では、前処理後、次のように展開されます。

extern __declspec(dllimport) PyTypeObject LuaObject_Type;

LuaObject_Typeつまり、リンカはインポート ライブラリからの定義を見つけようとします。これはもちろん間違っています。なぜなら、その新しい型は lunatic in によって作成および実装されているからですluainpython.c。代わりに、適切なプロトタイプを使用する必要がありextern PyTypeObject LuaObject_Type;ます。

またluaopen_loadlib、取得している他の未定義の参照を説明する Lua5.1 では非推奨になっていることに注意してください。実際、以下の lunatic-python の使用法はすべて非推奨です。

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

代わりにこれに置き換える必要があります。

luaL_openlibs(L);
于 2013-04-15T10:11:27.537 に答える