Ошибка связывания Boost.Python с stlport как stdlib - PullRequest
1 голос
/ 18 апреля 2011

Я пытаюсь создать расширения C ++ для python.Мой код C ++ опирается на STLPort 5.1.0.Я скомпилировал boost.python с помощью stdlib = stlport.Это происходит в моем компиляторе Microsoft Visual Studio 2005.

Но я продолжаю получать следующую ошибку компоновки при попытке скомпилировать свой тестовый проект.

stdafx.h содержит:

// STL
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iostream>
using namespace std;

// Boost
#include <boost/shared_ptr.hpp>
#include <boost/algorithm/string.hpp>
#define BOOST_PYTHON_STATIC_LIB

TestProject.cpp: #include "stdafx.h" #include "TestProject.h"

/**Python Link Begin**/
#include <boost/python.hpp>
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>

using namespace boost::python;

boost::mt19937 gen;
struct World
{
    std::string msg;
    double mypi;

    World(std::string msg): msg(msg) {
        gen.seed(std::time(0));
    } // 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; }

    double getgaussrand() {
        boost::normal_distribution<> nd(0.0, 1.0);
        boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(gen, nd);
        return var_nor();
    }

};

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

Самое главное, следующие ошибки компоновки приводят: Ошибка 2, ошибка LNK2019: неразрешенный внешний символ "класс boost :: python :: api :: object __cdecl boost :: python :: objects :: function_object (struct boost :: python :: objects :: py_function const &, struct stlpd_std :: pair const &) "(? function_object @объекты @ python @ boost @@ YA? AVobject @ api @ 23 @ ABUpy_function @ 123 @ ABU? $ pair @ PBUkeyword @ detail @ python @ boost @@ PBU1234 @@ stlpd_std @@@ Z), упоминаемые в функции "класс boost ::python :: api :: object __cdecl boost :: python :: detail :: make_function_aux, класс stlpd_std :: allocator> (__thiscall World :: *) (void), структура boost :: python :: default_call_policies, struct boost :: mpl:: vector2, класс stlpd_std :: allocator>, struct World &>, structboost :: mpl :: int_ <0>> (класс stlpd_std :: basic_string, класс stlpd_std :: allocator> (__thiscall World :: *) (void), структура boost :: python :: default_call_policies const &, struct boost ::mpl :: vector2, класс stlpd_std :: allocator>, struct World &> const &, struct stlpd_std :: pair const &, struct boost :: mpl :: int_ <0>) "(?? $ make_function_aux @ P8World @@ AE? AV? $ basic_string @ DV? $ char_traits @ D @ stlpd_std @@ V? $ распределитель @ D @ 2 @@ stlpd_std @@ XZUdefault_call_policies @ питон @ подталкивание @@ U? $ Vector2 @ V? $ basic_string @ DV? $ char_traits@ D @ stlpd_std @@ V? $ распределитель @ D @ 2 @@ stlpd_std @@ AAUWorld @@@ MPL @ 6 @ U? $ ИНТ _ @ $ 0A @@ 86 @@ подробно @ питон @ подталкивание @@ YA? AVobject @апи @ 12 @ P8World @@ AE? AV? $ basic_string @ DV? $ char_traits @ D @ stlpd_std @@ V? $ распределитель @ D @ 2 @@ stlpd_std @@ XZABUdefault_call_policies @ 12 @ ABU? $ Vector2 @ V? $ basic_string@DV? $ char_traits @ D @ stlpd_std @@ V? $ распределитель @ D @ 2 @@ stlpd_std @@ AAUWorld @@@ MPL @ 2 @ $ пары ABU? @ PBUkeyword @ подробно @ Python @ импульс @@ @@ PBU1234 7@U? $ Int _ @ $ 0A @@ mpl @ 2 @@ Z) TestProject.obj

1 Ответ

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

Если я правильно помню, библиотека Boost Python требует, чтобы вы создавали ее заранее, чтобы ваши проекты, которые ее используют, могли ссылаться на нее. Вы уже сделали это?

...