包含python.h和boost/python.hpp的C++导致SEH异常
C++ including python.h and boost/python.hpp causes SEH exception
我最近在尝试修复我正在开发的c++软件中的python实现时偶然发现了一些东西
#include <python.h>
#include <boost/python.hpp>
则以下代码会导致SEH异常并违反内存访问:
boost::python::object mainModule;
Py_Initialize();
std::lock_guard<std::mutex> lg(PythonAccessMutex);
this->mainModule = boost::python::import("__main__");
boost::python::dict globalDict = boost::python::extract<boost::python::dict>(this->mainModule.attr("__dict__"));
删除python.h include解决了我的问题,但我一直无法找出导致异常的原因,我希望能够与我的同事分享他们为什么不应该这样做(除了破坏代码的明显原因)
我应该具体指出,代码运行良好,直到达到提取函数。
如果在Boost.Python标头之前包含Python.h
,则存在宏冲突。例如,Python.h
包括定义ULONGLONG_MAX
的LongObject.h
,这混淆了Boost的配置。detail/prefix.hpp
:中指出了包含问题
规则是
<Python.h>
必须包含在任何系统头之前(这样它就可以控制一些糟糕的宏)。不幸的是,Boost.Python首先需要#include <limits.h>
,至少。。。但这让我们尽可能接近。
经过一些设置工作,detail/wrap_python.hpp
包括Python.h
。
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- Python ctype 'c_char_p' Memory Leak