2011-11-13 11 views
5

Ho trascorso gli ultimi 2 giorni cercando di avviare degli esempi da Boost.Python con l'errore "ImportError: DLL non riuscita: il modulo specificato non è stato trovato", mentre cercavo di caricare i moduli pyd compilati (usando bjam). Stavo usando Windows 7 x64, Python 2.7 x64 con Boost 1.47. Ho seguito diverse risposte su StackOverflow e altri siti incl. nuove installazioni (Python 32 e 64 bit, Boost precompilato), creazione manuale delle librerie di Boost, controlli DLL con walker delle dipendenze e così via, senza fortuna. Mi sono registrato per condividere la soluzione, che ha funzionato qui e che spero possa aiutare qualcuno, a lottare con lo stesso errore;)Esempi Boost.Python, Windows 7 x64, "ImportError: caricamento DLL non riuscito: impossibile trovare il modulo specificato."

+0

Il problema era con il [KB2264107 di Windows aggiornamento] (http://support.microsoft.com/kb/2264107), "correzione" della routine di ricerca DLL (correzione per la sicurezza). Impostazione del valore di registro [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]: CWDIllegalInDllSearch a 0, consente di caricare correttamente i file DLL e di importare correttamente i moduli .pyd. Questo può accadere anche su altre versioni di Windows. – stx

+0

benvenuto in SO. Nota che SO è un sito di risposte e domande. Non è un blog per registrare i tuoi risultati nella programmazione. – joaquin

+0

@joaquin Lo so, ma come posso condividere la soluzione quando qualcuno affronta il problema simile? Se è un [molto scoraggiato modo] (http://meta.stackexchange.com/questions/17463/should-i-ask-a-question-i-know-the-answer-to) e questo thread non è corretto, si prega di moderatore rimuoverlo. – stx

risposta

2

Il problema era con l'aggiornamento di Windows KB2264107 (http://support.microsoft.com/kb/ 2264107), "messing" con la routine di ricerca DLL (correzione per la sicurezza). Impostazione del valore di registro [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]: CWDIllegalInDllSearch a 0, consente di caricare correttamente i file DLL e di importare correttamente i moduli .pyd. Questo può accadere anche su altre versioni di Windows.

4

Due soluzione, non c'è bisogno di usare regedit

  1. aggiungere BOOST_PYTHON_STATIC_LIB marco quando costruire la DLL. Permetterà al collegamento statico boost.python al file dll invece del carico dinamico in runtime.
  2. aggiungere Boost.Python dll al PATH o copiarlo stessa directory in cui la DLL localizzare
+0

Ho avuto lo stesso problema. È correlato al percorso di ricerca DLL ma non ha nulla a che fare con l'aggiornamento di Windows KB2264107 ("fixing" della routine di ricerca DLL). 2 è la risposta corretta. – user5280911

Problemi correlati