![](/img/trans.png)
[英]Compile c++ Programm with CMake that uses Boost/python.hpp
[英]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.