2012-07-27 20 views
16

He intentado durante semanas obtener que Microsoft Visual Studio 2010 cree una DLL para mí con SWIG. Si ya ha pasado por este proceso, ¿sería tan amable de dar una explicación detallada del proceso paso a paso? He buscado en todas partes en línea y he pasado muchas horas tratando de hacer esto; pero todos los tutoriales que encontré están desactualizados o mal explicados.Cómo crear una DLL con SWIG desde Visual Studio 2010

He logrado pasar por este proceso con cygwin; pero como algunos de ustedes saben, una DLL de cygwin no es muy práctica.

Como resultado, tengo archivos .i, .cpp y .h que sé que pueden crear una DLL juntos. Solo necesito saber cómo hacerlo con Visual Studio C++ 2010. El lenguaje al que me dirijo es Python.

Por favor, no me refiera a otro sitio; porque es probable que ya haya estado allí y lo haya intentado. Además, por favor, no comentarios sarcásticos porque es muy importante que esto funcione en el futuro cercano.

¡Muchas gracias por su ayuda con anticipación!

Respuesta

46

Instrucciones paso a paso. Esto supone que tiene el origen y está compilando una única extensión DLL que vincula el origen directamente en él. No volví a hacerlo después de crear un proyecto en funcionamiento, por lo que puede haber perdido algo. Comenta esta publicación si te quedas atascado en un paso. Si tiene una DLL existente y desea crear una DLL de extensión de Python que lo envuelva, estos pasos son ligeramente diferentes. Si necesita ayuda con ese comentario en esta publicación, la extenderé.

Editar 08.19.2012: Si a partir de un ejemplo C, no utilice -c++ en el paso 13 y el uso de .c en lugar de .cxx para la extensión de archivo envoltura en los pasos 14 y 19.

  1. Iniciar Visual Studio 2010
  2. Archivo, Nuevo, Proyecto desde código existente ...
  3. Seleccione el tipo de proyecto "Visual C++" y haga clic en Siguiente.
  4. Ingrese la ubicación del archivo de proyecto donde están los archivos .cpp/.h/.i.
  5. Para Nombre del proyecto, elija el nombre utilizado en la declaración% del módulo en su archivo .i (el caso es importante).
  6. Seleccione el tipo de proyecto "Proyecto de biblioteca enlazada dinámicamente (DLL)" y haga clic en Siguiente.
  7. Agregue para incluir rutas de búsqueda la ruta al archivo Python.h, generalmente algo como "C: \ Python27 \ include" y haga clic en Siguiente.
  8. Haga clic en Terminar.
  9. Haga clic con el botón derecho en Proyecto en Explorador de soluciones, Agregar, elemento existente ... y seleccione su archivo .i.
  10. Haga clic con el botón derecho en el archivo .i, Propiedades, y seleccione Configuración "Todas las configuraciones".
  11. Cambie el tipo de elemento a "Custom Build Tool" y haga clic en Aplicar.
  12. Seleccione "Custom Build Tool" en Propiedades (aparecerá después de Aplicar arriba).
  13. Introduzca la línea de comando de "swig -C++ -python -outdir $ (Outdir)% (Identity)" (esto supone que SWIG está en su ruta y redirige el archivo .py generado al directorio Debug o Release según sea necesario).
  14. En Salidas, ingrese "% (Filename) _wrap.cxx; $ (Outdir)% (Filename) .py".
  15. Haga clic en Aceptar.
  16. Haga clic con el botón derecho en el archivo .i y seleccione Compilar.
  17. Haga clic con el botón derecho en el proyecto, Agregar, Nuevo filtro, asígnele el nombre "Archivos generados".
  18. Haga clic con el botón derecho en "Archivos generados", haga clic en Propiedades y establezca "Archivos SCC" en "Falso" (si utiliza el control de origen, esto evita que VS2010 intente controlar los archivos generados en este filtro).
  19. Haga clic con el botón derecho en "Archivos generados", agregue, salga del elemento y seleccione el archivo _wrap.cxx que generó la compilación.
  20. Haga clic con el botón derecho en el proyecto, Propiedades.
  21. Seleccione Configuración "Todas las configuraciones".
  22. Seleccione Propiedades de configuración, Enlazador, General, Directorios de biblioteca adicionales y agregue la ruta a las bibliotecas de python, normalmente "C: \ Python27 \ libs".
  23. Seleccione Propiedades de configuración, General y establezca TargetName en "_ $ (ProjectName)".
  24. Establezca la Extensión de destino en ".pyd".
  25. Cree la versión "Versión" del proyecto. No puede compilar la versión de depuración a menos que construya una versión de depuración de Python.
  26. Abra una consola, vaya al directorio de versiones del proyecto, ejecute python, importe su módulo y llame a una función.
+0

Gracias Marque por salvarme (y probablemente a muchas otras personas) el problema de encontrar este proceso a través del método de prueba y error. Tuve que agregar a "Propiedades del proyecto >> Directorios de VC++ >> Incluir directorios" mi C: \ Python27 \ include; pero de lo contrario, funcionó como un sueño! Por cierto, estaba usando Microsoft Visual C++ Express; pero el proceso es obviamente el mismo. – user1449530

+0

@Mark: excelente publicación, ¿pueden extenderla al caso de que tenga una DLL que sale? –

+0

Vale la pena señalar que SWIG no funcionará con la versión python de 64 bits. Use la versión de 32 bits en su lugar. – odedfos

Cuestiones relacionadas