gpt4 book ai didi

c++ - 将错误 Boost.Python 与 STLport 作为 stdlib 链接

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:41 26 4
gpt4 key购买 nike

我正在尝试为 python 创建 C++ 扩展。我的 C++ 代码依赖于 STLPort 5.1.0。我用 stdlib=STLport 编译了 boost.python。这发生在我的编译器 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

测试项目.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 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 ) 在函数中引用 "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>>(类 STLpd_std::basic_string,类 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

最佳答案

如果我没记错的话,Boost Python 库要求您提前构建它,以便使用它的项目可以链接到它。你已经这样做了吗?

关于c++ - 将错误 Boost.Python 与 STLport 作为 stdlib 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com