我正在尝试为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
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&amp;,struct stlpd_std: :pair const&amp;)“(?function_object @ objects @ 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&gt;(__ thiscall World :: *)(void),struct boost :: python :: default_call_policies,struct boost :: mpl :: vector2,class stlpd_std :: allocator&gt;,struct World&amp;&gt ;, struct boost :: mpl :: int_&lt; 0&gt;&gt;(class stlpd_std :: basic_string ,类stlpd_std :: allocator&gt;(__ thiscall World :: *)(void),struct boost :: python :: default_call_policies const&amp;,struct boost :: mpl :: vector2,class stlpd_std :: allocator&gt ;,struct World &amp;&gt; const&amp;,struct stlpd_std :: pair const&amp;,struct boost :: mpl :: int_ &lt; 0&gt;)“(?? $ 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'$分配器@ d @ @@ 2 @@ stlpd_std @@@ AAUWorld MPL @ 6 @ U&$ INT _ @ $ 0A @@ 86 @@细节@蟒蛇@升压@@ YA?AVobject @ API @ 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? $ pair @ PBUkeyword @ detail @ python @ boost @@ PBU1234 @@ 7 @ U?$ int _ @ $ 0A @@ mpl @ 2 @@ Z)TestProject.obj
答案 0 :(得分:0)
如果我没记错的话,Boost Python库要求您提前构建它,以便使用它的项目可以链接它。你有没有这样做过?