简体   繁体   English

将错误Boost.Python与stlport链接为stdlib

[英]Linking error Boost.Python with stlport as stdlib

I'm trying to create C++ extensions for python. 我正在尝试为python创建C ++扩展。 My C++ code relies on STLPort 5.1.0. 我的C ++代码依赖于STLPort 5.1.0。 I've compiled boost.python with stdlib=stlport. 我已经用stdlib = stlport编译了boost.python。 This occurs in my compiler which is Microsoft Visual Studio 2005. 这发生在我的编译器(Microsoft Visual Studio 2005)中。

But I keep getting the following linking error when I attempt to compile my test project. 但是,当我尝试编译测试项目时,仍然收到以下链接错误。

stdafx.h contains: 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" 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>) 最重要的是,以下链接错误结果导致:错误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 @ objects @ python @ boost @@ YA?AVobject @ api @ 23 @ ABUpy_function @ 123 @ ABU?$ pair @ PBUkeyword @ detail @ python @ boost @函数“ class boost :: python :: api :: object __cdecl boost :: python :: detail :: make_function_aux,class stlpd_std :: allocator>(__thiscall World :: *)中引用的@ PBU1234 @@ stlpd_std @@@@ Z) (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 ”($ 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. 如果我没记错的话,Boost Python库要求您提前构建它,以便使用它的项目可以链接到它。 Have you done this already? 你已经做到了吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM