gpt4 book ai didi

python - Python 3 PyType_Ready 中的段错误

转载 作者:行者123 更新时间:2023-12-01 23:33:10 24 4
gpt4 key购买 nike

我有一个以 C++ 启动并调用 Python 的应用程序,我正在将其转换为 Python 3。我在 PyType_Ready 中遇到了段错误,而在 python 2 上却没有遇到这种情况。

以下是在 CENTOS 7、gcc 4.8.5 上重现的步骤,使用 conda 获取 py2/py3:

cd $WORKING # new empty directory
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh # use $WORKING/mc3 for the prefix
source mc3/etc/profile.d/conda.sh
conda create -n py2 python=2
conda create -n py3 python=3
conda activate py2
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib
g++ -o dummy_py2 -I$CONDA_PREFIX/include/python2.7 -L$CONDA_PREFIX/lib -lpython2.7 dummy.cpp
./dummy_py2 # this runs ok
conda deactivate
conda activate py3
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib
g++ -o dummy_py3 -I$CONDA_PREFIX/include/python3.8 -L$CONDA_PREFIX/lib -lpython3.8 dummy.cpp
./dummy_py3 # seg fault

dummy.cpp 所在位置:

#define PY_SSIZE_T_CLEAN
#include "Python.h"

typedef struct {
PyObject_HEAD
const char *data;
} MyObject;

static PyTypeObject MyObject_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"mymod.MyObject", /* tp_name */
sizeof(MyObject), /* tp_basicsize */
0, /* tp_itemsize */
};


int main() {
printf("This is a dummy test\n");
PyType_Ready(&MyObject_Type);
printf("We did it\n");
return 0;
}

我使用 gdb 来获取堆栈跟踪(编辑路径):

#0  0x00007f6966929b62 in PyTuple_New () from $CONDA_PREFIX/lib/libpython3.8.so.1.0
#1 0x00007f696692bb46 in PyType_Ready () from $CONDA_PREFIX/lib/libpython3.8.so.1.0
#2 0x00007f696692ca27 in PyType_Ready () from $CONDA_PREFIX/lib/libpython3.8.so.1.0
#3 0x00000000004006b5 in main ()

相关引用(我正在使用示例部分): https://docs.python.org/3/c-api/typeobj.html

我尝试从一个更大的应用程序创建这个最小的示例,但希望这是一个受支持的用例?感谢您的帮助。

最佳答案

好的,解决了。我需要添加 Py_Initialize。有效的新代码:

int main() {
printf("This is a dummy test\n");
Py_Initialize();
PyType_Ready(&MyObject_Type);
printf("We did it\n");
return 0;
}

关于python - Python 3 PyType_Ready 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59721990/

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