2011-09-20 14 views
5

Sto provando a creare una DLL di estensione python su una macchina Win7 a 64 bit usando cygwin (poiché cygwin funziona solo come processo a 32 bit, questo è in realtà un cross-compiling).Costruire 64bit libpython27.a utilizzando cygwin, dlltool

ho creato libpython27.a me stesso da python27.dll utilizzando dlltool (come spiegato, per esempio, here), ma la costruzione non riescono durante la fase di linker dicendo
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
Questo è esattamente l'errore segnalato here (dove la il ragazzo finì per passare al compilatore MSVC ...).

Maggiori informazioni:
- Python 2.7.2 attivo, Win64, x64
- ultima versione di Cygwin, usando il compilatore /usr/bin/x86_64-w64-mingw32-g++.exe

fa qualcuno sa se questo è supportato?
C'è un modo per usare dlltool che mi manca qui?

(I ha trovato here la guida di utilizzare
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
ma quando si fa così ho preso "invalid bfd target" errore dal dlltool)

Grazie!

Aggiornamento: Credo che possa essere fatto perché Enthought python contiene un tale file. Vorrei crearne uno per le distribuzioni più comuni che non lo contengono.

+0

Beh, se conoscevamo la bandiera, non sarebbe _secret_ ora sarebbe? – brc

risposta

0

io non sono sicuro di come utile a trovare questo, ma in fondo alla pagina si è collegato al c'è un link per here - Dove dice:

Non utilizzare MinGW-W64. Come noterete, la libreria di importazione MinGW per Python (ad esempio libpython27.a) viene omessa dalla versione AMD64 di Python. Questo è intenzionale. Non provare a crearne uno utilizzando dlltool. Non esiste ancora una versione ufficiale di MinGW-w64, è ancora in "beta" e considerato instabile, sebbene sia possibile ottenere un build a 64 bit da ad es. TDM-GCC. Ci sono stati anche problemi con il runtime mingw in conflitto con il runtime MSVC; questo può succedere da posti che non ti aspetti da , come all'interno di librerie di runtime per g ++ o gfortran. Per rimanere sul lato sicuro, evitare MinGW-w64 per ora.

+0

Sì, l'ho visto, non sono sicuro di quanto siano affidabili questi dati. Ad esempio, in Enthought python libpython27.a non viene omesso nemmeno nella versione AMD64. –

1

Il problema è che si sta utilizzando il dlltool a 32 bit. Probabilmente in C: \ MinGW \ bin invece di C: \ MinGW64 \ bin. È possibile modificare il percorso, o eseguire lo strumento a 64 bit specificamente come tale:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a 
Problemi correlati