如题 我的 c++代码:
#include <Python.h>
#include <iostream>
#include <marshal.h>
using namespace std;
int main(){
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs, *pValue;
//cout<<233<<endl;
Py_Initialize();
FILE *fff = fopen("./a.pyc","br");
pModule = PyMarshal_ReadObjectFromFile(fff);
//Py_DECREF(pModule);
//cout<<PyCode_GetNumFree(pModule);
//PyImport_ExecCodeModule("asd",pModule);
pValue = PyLong_FromLong(123);
cout<<PyCode_Check(pModule);
return 0;
}
只要运行了 PyCode_Check(pModule) 就会导致段错误 进一步测试发现 只要调用 pModule->ob_type 就会导致段错误 同时 a.pyc 文件在 python 中使用 marshal.load 读取 运行 是完全正常的
环境: macos 10.13 测试过 homebrew 的 python 以及 miniconda 的 python 均有这个问题
该如何解决?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.