boost_python importation d'erreur: le module ne permet pas de définir la fonction init

Tout d'abord: j'ai regardé les questions connexes, mais ils ne sont pas très utile, malheureusement. Je suis d'essayer d'envelopper un enum et une classe à partir d'une bibliothèque externe.

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

#include <libvpsc/rectangle.h>
using vpsc::Rectangle;
using vpsc::Dim;

BOOST_PYTHON_MODULE(adaptagrams)
{
    enum_<Dim>("dim")
        .value("x", vpsc::XDIM)
        .value("y", vpsc::YDIM)
        .value("unset", vpsc::UNSET)
    ;

    class_<Rectangle>("Rectangle",
        init<double, double, double, double, optional<bool> >())

        .add_property("centerX", &Rectangle::getCentreX)
        .add_property("centerY", &Rectangle::getCentreY)
        .add_property("width", &Rectangle::width, &Rectangle::set_width)
        .add_property("height", &Rectangle::height, &Rectangle::set_height)
    ;
}

et compiler avec:

g++ -fPIC -I/usr/include/python2.7 -c adaptagrams.cpp -o adaptagrams.o
g++ -shared -Wl,-soname,adaptagrams.so -o adaptagrams.so adaptagrams.o -lpython2.7  -lboost_python -lvpsc

Cependant, lorsque j'essaie d'importer le .donc, module, j'obtiens une erreur:

ImportError: dynamic module does not define init function (PyInit_adaptagrams)

Des idées?

Mise à jour: Quand je redémarre Python et essayer l'importation, la première erreur que je reçois est:

ImportError: ./adaptagrams.so: undefined symbol: _ZN8topology13computeStressERKSt6vectorIPNS_4EdgeESaIS2_EE

Quand je l'ai essayer à nouveau, le 2ème est la dynamique de l'importation à partir de ci-dessus (2.7) et une erreur de segmentation (3.2). Boost est compilé à la fois contre 2,7 et 3,2 et je suis les liens entre le droit sur chaque approche.

Mise à jour 2: Le tutoriel code de la boost_python page fonctionne:

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

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

BOOST_PYTHON_MODULE(constructor)
{
    class_<Hello>("Hello", init<std::string>())
        .def("greet", &Hello::greet)
        .def("set", &Hello::set)
    ;
}

Même compilation:

g++ -fPIC -I/usr/include/python2.7 -c constructor.cpp -o constructor.o
g++ -shared -Wl,-soname,constructor.so -o constructor.so constructor.o -lpython2.7 -lboost_python
Cette question semble être hors-sujet car il s'agit d'une bibliothèque manquante.

OriginalL'auteur Michael Schubert | 2011-12-06