![](/img/trans.png)
[英]Segmentation fault when importing a C++ shared object in Python
[英]Python C API segmentation fault when importing library in py file
我正在尝试从 C 程序运行 python 程序。
但是,当我在 my.py 文件中添加行import signal
时,出现分段错误。
使用 GDB 我看到行pModule = PyImport_Import(pName);
返回 NULL 值。
(gdb) print pModule
$1 = (PyObject *) 0x0
当我删除 python 中的线路import signal
时,模块正确加载。 你知道如何解决这个问题吗?
这是我的 python 代码:
import signal
def main(person):
print("DANS PYTHON")
return "What's up " + person;
这是我的 C 代码:
#include <stdio.h>
#include <Python.h>
void main(void) {
Py_Initialize();
PyObject *pName,*pName2, *pModule, *pFunc, *pArgs, *pValue;
PySys_SetPath(L".");
pName = PyUnicode_FromString((char*)"main");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, (char*)"main");
pArgs = Py_BuildValue("(s)",(char *)"137912500");
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
return;
}
我正在使用 Ubuntu 20.04
在此先感谢您的帮助
我也在 Ubuntu 20.04 上,我也有同样的问题。
从 c 程序运行时,我发现 sys.path 是['.']
。 所以它只在当前目录中搜索。
我能够通过在import signal
之前添加这 2 行来运行您的脚本
import sys
sys.path.append("/usr/lib/python3.8")
import signal
def main(person):
print("DANS PYTHON")
return "What's up " + person
要获取我运行的信号模块的文件夹:
$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal
>>> signal.__file__
'/usr/lib/python3.8/signal.py'
>>>
我认为某处缺少配置,但我对此一无所知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.