开发者

Linking error Boost.Python with stlport as stdlib

I'm trying to create C++ extensions for python. My C++ code relies on STLPort 5.1.0. I've compiled boost.python with stdlib=stlport. This occurs in my compiler which is Microsoft Visual Studio 2005.

But I keep getting the following linking error when I attempt to compile my test project.

stdafx.h contains:

// 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::v开发者_开发百科ariate_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)
    ;
}

Most Importantly, the following linking error results: Error 2 error LNK2019: unresolved external symbol "class boost::python::api::object __cdecl boost::python::objects::function_object(struct boost::python::objects::py_function const &,struct stlpd_std::pair const &)" (?function_object@objects@python@boost@@YA?AVobject@api@23@ABUpy_function@123@ABU?$pair@PBUkeyword@detail@python@boost@@PBU1234@@stlpd_std@@@Z) referenced in function "class boost::python::api::object __cdecl boost::python::detail::make_function_aux,class stlpd_std::allocator > (__thiscall World::*)(void),struct boost::python::default_call_policies,struct boost::mpl::vector2,class stlpd_std::allocator >,struct World &>,struct boost::mpl::int_<0> >(class stlpd_std::basic_string,class stlpd_std::allocator > (__thiscall World::*)(void),struct boost::python::default_call_policies const &,struct boost::mpl::vector2,class 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?$allocator@D@2@@stlpd_std@@XZUdefault_call_policies@python@boost@@U?$vector2@V?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@AAUWorld@@@mpl@6@U?$int_@$0A@@86@@detail@python@boost@@YA?AVobject@api@12@P8World@@AE?AV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@XZABUdefault_call_policies@12@ABU?$vector2@V?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@AAUWorld@@@mpl@2@ABU?$pair@PBUkeyword@detail@python@boost@@PBU1234@@7@U?$int_@$0A@@mpl@2@@Z) TestProject.obj


If I remember correctly, the Boost Python library requires you to build it ahead of time so that your projects that use it can link against it. Have you done this already?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜