2012-06-14 21 views
7

Tengo un gran problema al utilizar mi código de C++ desde Visual C++ (envuelto por boost) en Python.Ejemplo de Boost Python Hello World que no funciona en Python

Muy bien, entonces las herramientas que estoy usando son: Visual Studio 2010, BoostPro 1_47, Windows 7 y Python 2.7 (32 bits).

Tengo el siguiente código que compila bien en Visual Studio 2010:

#define BOOST_PYTHON_STATIC_LIB 
#include <boost/python.hpp> 
using namespace boost::python; 

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 
    std::string greet() { return msg; } 
    std::string msg; 
}; 


BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
      .def("greet", &World::greet) 
      .def("set", &World::set); 
} 

Está en el formato: Aplicación de consola Win32 >>> Proyecto vacío/DLL.

En "Propiedades del proyecto":

VC++ DIRECTORIES: 
    I added: 
    >>> INCLUDE DIRECTORIES: C:\Program Files\boost\boost_1_47;C:\Python27\include  . 
    >>> LIBRARY DIRECTORIES: C:\Program Files\boost\boost_1_47\lib;C:\Python27\libs 

Todo esto hace que el C++ acumulación de archivos, pero entonces no se puede acceder a él desde Python.

Esto es lo que dice Python cuando trato de utilizar el módulo:

">>> import hello 
Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    import hello 
ImportError: No module named hello 

así que supongo que mi pregunta es ... ¿Cómo puedo obtener Python para encontrarlo ???

Cuando se compila el código C++ crea un archivo DLL. ¿Debo cambiar la ubicación del archivo? Si es así, ¿dónde debería ponerlo?

Su ayuda sería muy apreciada

Respuesta

11

yo sepa lo que tiene que cambiar la extensión del archivo DLL para .pyd o de otra manera Python no será capaz de cargarlo. Creo que puede establecer una opción de compilación para configurar automáticamente la extensión en VS, pero no estoy seguro.

Además, asegúrese de que la extensión creada se encuentre en alguna parte en el PYTHONPATH, la ruta, python buscará módulos para cargar.

+0

Gracias Constantinius! : D Finalmente conseguí que esto funcionara después de horas, horas y horas de intentar hacer que boost.python hiciera lo suyo. – user1449530

+0

¿puede proporcionar una receta de lo que ha hecho para tener éxito? – Noam

+0

También tuve que agregar un directorio que contenía archivos Boost Python * .lib y * .dll a PATH –