2012-07-27 14 views
16

Ho cercato per settimane di ottenere Microsoft Visual Studio 2010 per creare una DLL per me con SWIG. Se hai già affrontato questo processo, saresti così gentile da dare una spiegazione dettagliata del processo passo dopo passo? Ho cercato ovunque online e ho passato molte ore a provare a farlo; ma tutte le esercitazioni che ho trovato sono obsolete o mal spiegate.Come creare una DLL con SWIG da Visual Studio 2010

Sono riuscito a passare questo processo con cygwin; ma come alcuni di voi sanno, una DLL cygwin non è molto pratica.

Come risultato, ho i file .i, .pppp e .h che so possono creare una DLL insieme. Ho solo bisogno di sapere come fare questo con Visual Studio C++ 2010. Il linguaggio che sto targeting è Python.

Si prega di non fare riferimento a un altro sito; perché è probabile che ci sia già stato e ci abbia provato. Inoltre, per favore nessun commento snarky perché è molto importante che questo funzioni nel prossimo futuro.

Grazie mille per il vostro aiuto in anticipo!

risposta

46

Istruzioni passo-passo. Questo presuppone che tu abbia la fonte e stai costruendo una singola estensione DLL che collega direttamente la sorgente al suo interno. Non sono tornato indietro dopo aver creato un progetto di lavoro, quindi potrei aver perso qualcosa. Commenta questo post se ti trovi bloccato su un passaggio. Se si dispone di una DLL esistente e si desidera creare una DLL di estensione Python che la avvolge, questa procedura è leggermente diversa. Se hai bisogno di aiuto con questo commento su questo post, lo estenderò.

Edit 2012/08/19: Se a partire da un esempio in C, non usare -c++ al passaggio 13 e utilizzare .c invece di .cxx per l'estensione del file avvolgere nei passaggi 14 e 19.

  1. Avviare Visual Studio 2010
  2. File, Nuovo, Progetto da Codice esistente ...
  3. Selezionare il tipo di progetto "Visual C++" e fare clic su Avanti.
  4. Immettere la posizione del file di progetto in cui si trovano i file .cpp/.h/.i.
  5. Per Nome progetto, selezionare il nome utilizzato nell'istruzione% module nel file .i (caso pertinente).
  6. Selezionare il tipo di progetto "Progetto di libreria a collegamento dinamico (DLL)" e fare clic su Avanti.
  7. Aggiungi a Includi percorsi di ricerca il percorso del file Python.h, in genere qualcosa come "C: \ Python27 \ include" e fai clic su Avanti.
  8. Fare clic su Fine.
  9. Fare clic con il tasto destro del mouse su Progetto in Esplora soluzioni, Aggiungi, Elemento esistente ... e selezionare il file .i.
  10. Fare clic con il tasto destro del mouse sul file .i, Proprietà, quindi selezionare Configurazione "Tutte le configurazioni".
  11. Cambia il tipo di elemento in "Strumento di creazione personalizzata" e fai clic su Applica.
  12. Seleziona "Custom Build Tool" in Proprietà (verrà visualizzato dopo Applica sopra).
  13. Immettere la riga di comando di "swig -C++ -python -outdir $ (Outdir)% (Identity)" (ciò presuppone che SWIG si trovi nel percorso e reindirizzi il file .py generato alla directory Debug o Release come necessario).
  14. In Output immettere "% (Nome file) _wrap.cxx; $ (Outdir)% (Nome file) .py".
  15. Fare clic su OK.
  16. Fare clic con il tasto destro del mouse sul file .i e selezionare Compila.
  17. Fare clic con il tasto destro del mouse sul progetto, Aggiungi, Nuovo filtro, denominarlo "File generati".
  18. Fare clic con il tasto destro del mouse su "File generati", fare clic su Proprietà e impostare "File SCC" su "False" (se si utilizza il controllo del codice sorgente, ciò impedisce a VS2010 di provare a archiviare i file generati in questo filtro).
  19. Fare clic con il tasto destro del mouse su "File generati", Aggiungi, Uscita da elemento e selezionare il file _wrap.cxx che è stato generato dalla compilazione.
  20. Fare clic con il tasto destro del mouse sul progetto, Proprietà.
  21. Selezionare la configurazione "Tutte le configurazioni".
  22. Selezionare Configuration Properties, Linker, General, Additional Library Directories e aggiungere il percorso alle librerie python, in genere "C: \ Python27 \ libs".
  23. Selezionare Configuration Properties, General e impostare TargetName su "_ $ (Nome progetto)".
  24. Imposta estensione destinazione su ".pyd".
  25. Costruire la versione "Release" del progetto. Non è possibile creare la versione di debug a meno che non si costruisca una versione di debug di Python.
  26. Aprire una console, accedere alla directory Release del progetto, eseguire python, importare il modulo e chiamare una funzione!
+0

Grazie Mark per avermi salvato (e probabilmente un sacco di altre persone) il problema di trovare questo processo attraverso tentativi ed errori! Ho dovuto aggiungere a "Proprietà progetto >> Directory VC++ >> Include directory" my C: \ Python27 \ include; ma per il resto ha funzionato come un sogno! A proposito, stavo usando Microsoft Visual C++ Express; ma il processo è ovviamente lo stesso. – user1449530

+0

@Mark - ottimo post, puoi gentilmente estenderlo al caso in cui si ha una DLL in uscita? –

+0

Vale la pena notare che SWIG non funzionerà con la versione python a 64 bit. Utilizzare invece la versione a 32 bit. – odedfos

Problemi correlati