1

我在 Visual Studio 2005 中与 STLPort 5.1.0 和 Boot.Python 1.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)
    ;
}

不幸的是,由于出现了其他编译​​错误,我感到非常沮丧,以至于我已经将我的代码破坏到可以重现链接错误的程度。但错误是链接以“stlp”开头的未定义符号的错误,我认为这是指 STLPort 方法。

所以在这一点上,我只是在寻找一种在兼容性方面更容易处理的 Boost 替代方案。

4

1 回答 1

0

尝试使用 SWIG。我记得它是直截了当的。

于 2011-04-18T21:12:05.593 回答