boost.python 使用 docstring_options 公开 类 时出现 MSVC12 链接器错误
boost.python MSVC12 linker errors when exposing classes with docstring_options
我经常使用 boost.python 和 MSVC 12(动态链接)将 c++ classes 暴露给 python。最近我一直在尝试使用 "docstring_options" class 来包含文档。文档示例工作正常:
http://www.boost.org/doc/libs/1_54_0/libs/python/doc/v2/docstring_options.html
但是,当我包含 class 并公开它时,我收到链接器错误:
错误 LNK2019:未解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z) 在函数 "public: __thiscall 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();
}
我编译了最新版本的boost (1.63),现在问题已经解决了。我想我的旧图书馆在某种程度上是不完整的。
我经常使用 boost.python 和 MSVC 12(动态链接)将 c++ classes 暴露给 python。最近我一直在尝试使用 "docstring_options" class 来包含文档。文档示例工作正常:
http://www.boost.org/doc/libs/1_54_0/libs/python/doc/v2/docstring_options.html
但是,当我包含 class 并公开它时,我收到链接器错误:
错误 LNK2019:未解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z) 在函数 "public: __thiscall 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();
}
我编译了最新版本的boost (1.63),现在问题已经解决了。我想我的旧图书馆在某种程度上是不完整的。