Безболезненный способ получить расширения C ++ в Python в Visual Studio 2005 - PullRequest
1 голос
/ 09 апреля 2011

У меня возникли очень серьезные проблемы совместимости со STLPort 5.1.0 и Boot.Python 1.46.1 в Visual Studio 2005, мне было интересно, есть ли другой способ заставить Python вызывать код C ++.

На всякий случай, если кто-то может помочь: Следующий код компилируется и запускается без проблем: char const * greet () { вернуть "привет, мир"; }

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

Ошибки связывания начинаются, когда я делаю что-то немного более сложное:

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

struct World
{
    std::string msg;
    double mypi;

    World(std::string msg): msg(msg) {} // added constructor
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    double get() const { return mypi; }
    void setter(double mypi) { this->mypi = mypi; }


};

BOOST_PYTHON_MODULE(hello_ext)
{
    class_<World>("World", init<std::string>())
        .def("greet", &World::greet)
        .def("set", &World::set)
        .def_readonly("msg",  &World::msg)
        .def_readwrite("mypi", &World::mypi)
        .add_property("rovalue", &World::get)
        .add_property("value", &World::get, &World::setter)
    ;
}

К сожалению, я был так расстроен, что исказил свой код до такой степени, что я могу воспроизвести ошибки компоновки, потому что появляются другие ошибки компиляции. Но ошибки связывали ошибки для неопределенных символов, начинающихся с 'stlp', что, как я полагаю, относится к методам STLPort.

Итак, на данный момент я просто ищу альтернативу Boost, с которой немного проще справиться с точки зрения совместимости.

1 Ответ

0 голосов
/ 19 апреля 2011

Попробуйте использовать SWIG.Я помню, что это было прямо вперед.

...