簡體   English   中英

包含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包含LongObject.h定義ULONGLONG_MAX ,這會混淆Boost的配置。 包含問題在detail/prefix.hpp指出:

規則是<Python.h>必須在任何系統標頭之前包含(這樣它才能控制某些可怕的宏)。 不幸的是,Boost.Python至少需要首先#include <limits.h> ,但這會使我們盡可能地接近。

完成一些設置工作后, detail/wrap_python.hpp包括Python.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM