1

Visual Studio2005のSTLPort5.1.0およびBoot.Python1.46.1との互換性に非常に深刻な問題がありますが、PythonでC++コードを呼び出す方法は他にあるのではないかと考えていました。

誰かが助けてくれる場合に備えて、次のコードは問題なくコンパイルされ、実行されます。char const * greet(){return "hello、world"; }

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)
    ;
}

残念ながら、他のコンパイルエラーが表示されているため、リンクエラーを再現できるようにコードを壊してしまいました。しかし、エラーは、STLPortメソッドを参照していると思われる「stlp」で始まる未定義のシンボルのリンクエラーでした。

したがって、現時点では、互換性の点で少し扱いやすいBoostの代替手段を探しています。

4

1 に答える 1

0

SWIGを使ってみてください。真っ直ぐだったのを覚えています。

于 2011-04-18T21:12:05.593 に答える