Boost Python类导出无法编译,visual studio 2013中出现链接错误
Boost Python class export fails to compile with linking error in visual studio 2013
我自己编译了Boost,并用它将以下函数导出到DLL:
#include <boost/python.hpp>
using namespace boost::python;
std::string greet()
{
return "hello, dude !!";
}
BOOST_PYTHON_MODULE(hello)
{
def("greet", greet);
}
在我将hello.dll文件重命名为hello.pyd.之后,这在Python中加载得很好
现在我正在尝试这个:
#include <boost/python.hpp>
using namespace boost::python;
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set);
}
错误为:
Error 29 error LNK2019: unresolved external symbol "__declspec(dllimport) void * __cdecl boost::python::objects::find_static_type(void *,struct boost::python::type_info,struct boost::python::type_info)" (__imp_?find_static_type@objects@python@boost@@YAPAXPAXUtype_info@23@1@Z) referenced in function "private: virtual void * __thiscall boost::python::objects::value_holder<struct World>::holds(struct boost::python::type_info,bool)" (?holds@?$value_holder@UWorld@@@objects@python@boost@@EAEPAXUtype_info@34@_N@Z) D:CodePythonhellohellohello.obj hello
Error 30 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::python::converter::shared_ptr_deleter::shared_ptr_deleter(struct boost::python::converter::shared_ptr_deleter const &)" (__imp_??0shared_ptr_deleter@converter@python@boost@@QAE@ABU0123@@Z) referenced in function "public: __thiscall boost::shared_ptr<void>::shared_ptr<void><void,struct boost::python::converter::shared_ptr_deleter>(void *,struct boost::python::converter::shared_ptr_deleter)" (??$?0XUshared_ptr_deleter@converter@python@boost@@@?$shared_ptr@X@boost@@QAE@PAXUshared_ptr_deleter@converter@python@1@@Z) D:CodePythonhellohellohello.obj hello
Error 31 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::python::objects::class_base::~class_base(void)" (__imp_??1class_base@objects@python@boost@@QAE@XZ) referenced in function __unwindfunclet$??0?$class_@UWorld@@Unot_specified@detail@python@boost@@U2345@U2345@@python@boost@@QAE@PBD0@Z$0 D:CodePythonhellohellohello.obj hello
Error 32 error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::python::objects::register_dynamic_id_aux(struct boost::python::type_info,struct std::pair<void *,struct boost::python::type_info> (__cdecl*)(void *))" (__imp_?register_dynamic_id_aux@objects@python@boost@@YAXUtype_info@23@P6A?AU?$pair@PAXUtype_info@python@boost@@@std@@PAX@Z@Z) referenced in function "void __cdecl boost::python::objects::register_dynamic_id<struct World>(struct World *)" (??$register_dynamic_id@UWorld@@@objects@python@boost@@YAXPAUWorld@@@Z) D:CodePythonhellohellohello.obj hello
这是Visual Studio学习版2013。我按照这里给出的确切步骤编译了自己的boost库:http://www.boost.org/doc/libs/1_56_0/doc/html/bbv2/installation.html
我认为我的构建/安装在这之前还可以作为全局功能。但可能与MSVC 2012和13存在一些不兼容,因为boost python调试库名为boost_python-vc120-mt-gd-1_56.lib
。
我的答案是:使用Boost::Python::Object导致链接器错误
由于bjam使用以下步骤为静态链接编译boost:http://www.boost.org/doc/libs/1_56_0/doc/html/bbv2/installation.html
我需要定义BOOST_PYTHON_STATIC_LIB,否则它将为BOOST.PYTHON库假设动态链接。
编译代码:
#define BOOST_PYTHON_STATIC_LIB
#include <boost/python.hpp>
using namespace boost::python;
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set);
}
使用hello.dll的一种方法是首先将hello.dll重命名为hello.pyd,并将其复制到Python.exe开始的目录中,然后:
Python代码:
import hello
obj = hello.World()
obj.set("Hello World!")
obj.greet()
相关文章:
- 将"libpqxx"与Visual Studio 2013链接/安装,以便与PostgrSQL建立C++连接
- Visual Studio 2013,错误 MSB8020:找不到 Visual Studio 2010 的生成工具
- 为什么在Visual Studio 2013上的std::this_thread::sleep_for上死锁
- 性能报告 (.vspx) 在 Visual Studio 2013 中未打开(显示损坏)
- 在 Visual Studio 2013 中使用零大小数组C++
- Visual Studio 2013 标头包含失败
- Visual studio 2013 和 g++ 7.1 中将 int 和 long 类型相乘时的 c++ 差异行为
- 在Visual Studio 2013中编译的STL列表代码在Visual Studio 2019中给出了错误.想知道原
- 错误 LNK2019: 未解析的外部符号 Visual Studio 2013 与 openCV
- cv:内存位置的异常 - 运行 openCV 代码 Visual Studio 2013 & Visual Studio 2017 - Windows 7
- 模块计算机类型和目标计算机类型 Visual Studio 2013
- 如何在Visual Studio 2013 Ultimate Edition中包含某个单词的每一行中插入断点
- 具有显式参数和大小的可变参数模板.Visual Studio 2013.
- 使用 Visual Studio 2013 编译 GDCM dlls 2.8.4 for Windows
- 基本字符串操作有问题 [c++, Visual Studio 2013]
- Visual Studio 2013中可能的C/C 编译器错误
- 在Visual Studio 2013上.Win32 应用和 CLR 应用
- 我正在尝试在Visual Studio 2013中编写我的第一个"Hello World"代码。为什么我会收到"IntelliSense: no operator message"和"error C2
- DLL不导出Visual Studio 2013 VB代码中的字符串
- 我们如何使用Visual Studio 2013访问C 中的更改编号