2012-12-13 17 views
12

Utilizzo di MinGW32 su un PC Windows Sto tentando di compilare pySpotify. Il primo errore era che mancava libspotify/api.h. I risolto copiando la cartella appropriata da libspotify in C:\MinGW\include. Comunque ora dllwrap è ora fallendo con ld linking. I binari Spotify distribuiscono sono libspotify.dll e libspotify.lib. Non importa dove li ho messi (cartella pySpotify/sottocartelle della cartella di compilazione temp/sottocartelle e MinGW cartella/sottocartelle) o quello che io li nomino (.a , .o & .so) it mostra ancora gli stessi messaggi di errore.Uso dei file libspotify .dll/.lib nella compilazione MinGW32 pySpotify

L'errore pertinente è:

C:\MinGW\bin\dllwrap.exe -mdll -static --output-lib build\temp.win32-2.7\Release\src\lib_spotify.a --def build\temp.win32-2.7\Release\src\_spotify.def -s build\temp.win32-2.7\Release\src\module.o build\temp.win32-2.7\Release\src\session.o build\temp.win32-2.7\Release\src\link.o build\temp.win32-2.7\Release\src\track.obuild\temp.win32-2.7\Release\src\album.o build\temp.win32-2.7\Release\src\albumbrowser.o build\temp.win32-2.7\Release\src\artist.o build\temp.win32-2.7\Release\src\artistbrowser.o build\temp.win32-2.7\Release\src\search.o build\temp.win32-2.7\Release\src\playlist.o build\temp.win32-2.7\Release\src\playlistcontainer.o build\temp.win32-2.7\Release\src\playlistfolder.o build\temp.win32-2.7\Release\src\image.o build\temp.win32-2.7\Release\src\user.o build\temp.win32-2.7\Release\src\pyspotify.o build\temp.win32-2.7\Release\src\toplistbrowser.o -LC:\Python26\libs -LC:\Python26\PCbuild -lspotify -lpython26 -lmsvcr90 -o build\lib.win32-2.7\spotify\_spotify.pyd 
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: cannot find -lspotify 
collect2.exe: error: ld returned 1 exit status 
dllwrap: gcc exited with status 1 
error: command 'dllwrap' failed with exit status 1 

bok says on github che:

è necessario aggiungere le intestazioni API nel percorso di includere (aggiungere qualcosa di simile -I ~ \ libspotify \ include al vostro opzioni del compilatore) e la libreria condivisa nel percorso della libreria (aggiungi -L ~ \ libspotify \ lib alle opzioni del linker). Ciò consentirà al compilatore di trovare i file di inclusione necessari e il linker per trovare gli oggetti binari necessari.

Tuttavia la classe Extension distutils sembra essere deprecato e difficile da trovare la documentazione relativa (credo che questo è dove le opzioni di compilazione personalizzati bisogno di andare). Apprezzare che ~ potrebbe essere necessario modificare su %USERPROFILE% o simile. Allo stesso modo %PYTHONPATH%\Lib\distutils\distutils.cfg ha poca documentazione oltre la stanza [build]compiler=mingw32. Ciò rende impossibile modificare i comandi di compilazione/collegamento e le loro opzioni.

Come si compila pySpotify su Windows?

EDIT:

Utilizzando Python 2.6 e la copia libspotify.dll/libspotify.lib a C: \ Python26 \ PCbuild e rinominare loro di spotify.dll/libspotify.lib io ora ricevo un altro messaggio di errore da ld:

C:\MinGW\bin\dllwrap.exe -mdll -static --output-lib build\temp.win32-2.6\Release\src\lib_spotify.a --def build\temp.win32-2.6\Release\src\_spotify.def -s build\temp.win32-2.6\Release\src\module.o build\temp.win32-2.6\Release\src\session.o build\temp.win32-2.6\Release\src\link.o build\temp.win32-2.6\Release\src\track.obuild\temp.win32-2.6\Release\src\album.o build\temp.win32-2.6\Release\src\albumbrowser.o build\temp.win32-2.6\Release\src\artist.o build\temp.win32-2.6\Release\src\artistbrowser.o build\temp.win32-2.6\Release\src\search.o build\temp.win32-2.6\Release\src\playlist.o build\temp.win32-2.6\Release\src\playlistcontainer.o build\temp.win32-2.6\Release\src\playlistfolder.o build\temp.win32-2.6\Release\src\image.o build\temp.win32-2.6\Release\src\user.o build\temp.win32-2.6\Release\src\pyspotify.o build\temp.win32-2.6\Release\src\toplistbrowser.o -LC:\Python26\libs -LC:\Python26\PCbuild -lspotify -lpython26 -lmsvcr90 -o build\lib.win32-2.6\spotify\_spotify.pyd 
_spotify.exp: file not recognized: File format not recognized 
collect2.exe: error: ld returned 1 exit status 
dllwrap: gcc exited with status 1 
error: command 'dllwrap' failed with exit status 1 
+0

Forse il percorso assoluto non viene letto correttamente da ld di MinGW? Cioè, prova a spostare libspotify in una posizione relativa e vedi se questo non aiuta. –

+0

Ciao Nik, grazie per il suggerimento - ma ho provato a copiare su ogni cartella/sottocartella che posso trovare senza alcun risultato: "Non importa dove li metto (cartella/sottocartelle pySpotify, cartella/sottocartelle di creazione temporanea e cartella/sottocartelle MinGW)." – Metalshark

risposta

1

Non avendo accesso a un'installazione di mingw al momento, posso suggerire alcune cose.

Primo, ld è noto per essere schizzinoso sull'ordine degli argomenti. Stranamente, quando ho cercato su Google "ld argomento ordine", ho ottenuto un sacco di pagine che suggeriscono che l'ordine non importa, ma sono stato bruciato più volte da questo. Ho avuto più successo con il seguente ordine degli argomenti:

  1. Passa alla ld (cioè, -Wall)
  2. percorsi di ricerca Biblioteca (vale a dire, -LPATH)
  3. file oggetto
  4. librerie (vale a dire, -lspotify)

Ho notato nell'output del linker alcuni riferimenti a amd64.Non sono sicuro di come hai compilato gli altri file oggetto che hai, ma dal momento che libspotify è a 32 bit su Windows, immagino che mixare 32/64 bit qui non funzionerà troppo bene.

L'ultima cosa che mi viene in mente è che forse l'estensione dll è confusa con ld, hai provato a cambiare il nome del file in libspotify.so? So che è una specie di scena al buio, ma per il resto non sono sicuro di come aiutarti ulteriormente.

+0

Ho provato a rinominare entrambi i file in .so, .a e .o. Quando ho provato a utilizzare MinGW64 si è lamentato che non poteva essere compilato, quindi ora sto usando MinGW invece (su Windows a 64 bit). Con lo script di build non ho accesso all'argomento order che fa parte del problema. – Metalshark

1

Immagino che stiate cercando di collegare una versione a 64 bit di pyspotify su una versione a 32 bit di libspotify. Prova a ricostruire pyspotify aggiungendo il -m32 a CFLAGS e CXXFLAGS

+0

Non so come accedere a CFLAG/CXXFLAGS con setup.py (lo script di compilazione per pySpotify). – Metalshark

+0

CFLAGS = -m32 python setup.py dovrebbe fare il trucco. Assicurati anche di aver installato un python a 32 bit. Si noti che il problema potrebbe essere invertito: forse pyspotify è stato compilato a 32 bit e libspotify a 64 bit. – alexp

+0

''CFLAGS' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch." È l'errore che si riceve su Windows (sappiate che funziona su * nix). Ho intenzione di giocare con le variabili di ambiente e controllare che Python sia a 32 bit. – Metalshark

0

Ho aggiunto alcune istruzioni su come l'ho ottenuto per compilare il biglietto effettivo per il problema. Fammi sapere se ti ha aiutato!

https://github.com/mopidy/pyspotify/issues/63

+0

Si noti che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, pertanto le risposte devono essere il punto finale di una ricerca di una soluzione (vs. ancora un altro scalo di riferimenti, che tendono a diventare stantii nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

+0

Ho appena creato un account e la quantità massima di link che potrei pubblicare erano due. Ho avuto diversi link nella soluzione, quindi ho pensato che il modo migliore per avere tutte le informazioni intatte era di pubblicare un link al biglietto reale sono stati pubblicati la mia soluzione. – JDurman

+0

il punto è di postare la _soluzione qui_ (rispetto alla pubblicazione di un collegamento ad una soluzione altrove :-) – kleopatra

Problemi correlati