gpt4 book ai didi

python - C++ 包括 python.h 和 boost/python.hpp 导致 SEH 异常

转载 作者:行者123 更新时间:2023-11-30 05:48:05 24 4
gpt4 key购买 nike

我最近在尝试修复我正在使用的 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 包含解决了我的问题,但我一直无法找出为什么这会导致异常,我希望能够与我的同事分享为什么他们不应该这样做(过去它破坏代码的明显原因)

我应该具体一点,并指出代码运行良好,直到它遇到提取函数。

最佳答案

有宏冲突如果Python.h包含在 Boost.Python 头文件之前。例如,Python.h包括 LongObject.h定义 ULONGLONG_MAX这混淆了 Boost 的配置。 detail/prefix.hpp 中记录了包含问题:

The rule is that <Python.h> must be included before any system headers (so it can get control over some awful macros). Unfortunately, Boost.Python needs to #include <limits.h> first, at least... but this gets us as close as possible.

经过一些设置工作后, detail/wrap_python.hpp 包括 Python.h .

关于python - C++ 包括 python.h 和 boost/python.hpp 导致 SEH 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com