1

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

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

2
  • I have no idea about the error but... Statically linking BP is not the usually recommended course. BP extensions have some quarks when statically linked to BP. Commented Apr 19, 2011 at 4:41
  • Did you ever get to the bottom of this? I am experiencing a similar issue. Commented Dec 1, 2011 at 9:05

1 Answer 1

0

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?

Sign up to request clarification or add additional context in comments.

1 Comment

Yes, I've build the python .lib files like 'boost_python-vc80-mt-gdp-1_46_1.lib'.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.