2011-11-13 13 views
5

Pasé los últimos 2 días tratando de ejecutar ejemplos de Boost.Python con el error "ImportError: error de carga DLL: no se pudo encontrar el módulo especificado" al intentar cargar módulos pyd compilados (utilizando bjam). Estaba usando Windows 7 x64, Python 2.7 x64 con Boost 1.47. He seguido diferentes respuestas en StackOverflow y otros sitios incl. instalaciones nuevas (Python 32 y 64 bit, Boost precompilado), creación manual de bibliotecas de Boost, cheques de DLL con walker de dependencias y demás, sin suerte. Me registré para compartir la solución, que funcionó aquí y que espero pueda ayudar a alguien, luchando con el mismo error;)Ejemplos de Boost.Python, Windows 7 x64, "ImportError: Error de carga DLL: no se pudo encontrar el módulo especificado".

+0

El problema fue con el [KB2264107 de Windows update] (http://support.microsoft.com/kb/2264107), "arreglando" la rutina de búsqueda de DLL (corrección de seguridad). Estableciendo el valor de registro [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]: CWDIllegalInDllSearch en 0, permitido cargar correctamente los archivos DLL e importar correctamente los módulos .pyd. Esto también puede suceder en otras versiones de Windows. – stx

+0

bienvenido a SO. Tenga en cuenta que SO es un sitio de respuestas y preguntas. No es un blog para registrar sus logros en la programación. – joaquin

+0

@joaquin Lo sé, pero ¿cómo puedo compartir la solución cuando alguien tendrá problemas similares? Si es una [manera muy desalentada] (http://meta.stackexchange.com/questions/17463/should-i-ask-a-question-i-know-the-answer-to) y este hilo no es correcto, por favor moderador eliminarlo. – stx

Respuesta

2

El problema fue con la actualización de Windows KB2264107 (http://support.microsoft.com/kb/ 2264107), "messing" con la rutina de búsqueda de DLL (corrección de seguridad). Estableciendo el valor de registro [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]: CWDIllegalInDllSearch en 0, permitido cargar correctamente los archivos DLL e importar correctamente los módulos .pyd. Esto también puede suceder en otras versiones de Windows.

4

Dos solución, sin necesidad de utilizar regedit

  1. añadir BOOST_PYTHON_STATIC_LIB marco cuando construir su DLL. Permitirá boost.python enlace estático a su archivo dll en lugar de carga dinámica en tiempo de ejecución.
  2. añadir DLL Boost.Python a PATH o copiarlo al mismo directorio donde el archivo DLL localizar
+0

Tengo el mismo problema. Está relacionado con la ruta de búsqueda de DLL pero no tiene nada que ver con la actualización de Windows KB2264107 ("fijación" de la rutina de búsqueda de DLL). 2 es la respuesta correcta. – user5280911

Cuestiones relacionadas