我经常使用boost.python& amp;将c ++类暴露给python。 MSVC 12(动态链接)。最近我一直试图使用" docstring_options"来包含文档。类。文档示例工作正常:
http://www.boost.org/doc/libs/1_54_0/libs/python/doc/v2/docstring_options.html
但是,当我包含一个类并公开它时,我会遇到链接器错误:
错误LNK2019:未解析的外部符号" void __cdecl boost :: throw_exception(class std :: exception const&)"函数" public中引用了(?throw_exception @ boost @@ YAXABVexception @ std @@@ Z):__ thishisall boost :: detail :: shared_count :: shared_count(void *,struct boost :: python :: converter :: shared_ptr_deleter )"
我确定可能有一些简单的我不知道但是我无法弄明白。
非常感谢提前!
从boost示例拼接的示例代码为我提供了此错误。
#include <string>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/args.hpp>
#include <boost/python/docstring_options.hpp>
#include <boost/python.hpp>
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
int foo1(int i) { return i; }
int foo2(long l) { return static_cast<int>(l); }
int bar1(int i) { return i; }
int bar2(long l) { return static_cast<int>(l); }
namespace {
void wrap_foos()
{
using namespace boost::python;
def("foo1", foo1, arg("i"), "foo1 doc");
def("foo2", foo2, arg("l"), "foo2 doc");
}
void wrap_bars()
{
using namespace boost::python;
bool show_user_defined = true;
bool show_signatures = false;
docstring_options doc_options(show_user_defined, show_signatures);
def("bar1", bar1, arg("i"), "bar1 doc");
def("bar2", bar2, arg("l"), "bar2 doc");
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
}
BOOST_PYTHON_MODULE(boost_py_doc_demo)
{
boost::python::docstring_options doc_options(false);
wrap_foos();
wrap_bars();
}
答案 0 :(得分:0)
我编译了最新版本的boost(1.63),现在问题已经消失。我想我的旧图书馆在某种程度上是不完整的。