我的python/c库有一个奇怪的问题。在python〉= 3.7和〈python 3.10的情况下一切都很好。在python〉= 3.10的情况下,运行gdb的python脚本segfaults.显示PyObject上有segfaults * ret = PyDict_New();
我搜索了python3.10和3.11的发行说明,但是没有找到任何相关的东西(我搜索的是删除的函数,改变的行为等)。
密码为:
extern "C" PyObject* compute(const char* path, int b, int h, int f, int z, int m, int mf, char* output) {
PyObject* ret = PyDict_New();
// some code
return ret;
}
如果我完全删除代码,只让PyDict_New()
有什么想法吗?我有一种直觉,我错过了一些愚蠢的东西,但找不到什么。谢谢
1条答案
按热度按时间n9vozmp41#
您可能使用了
CDLL
或WinDLL
而不是PyDLL
来加载库。(全局解释器锁)。我能够用CDLL
和Python 3. 9加载,但不能用3. 10或3. 11加载,所以重现了您的问题,但是在没有GIL的情况下调用PythonAPI是未定义的行为。所有三个Python版本都可以像预期的那样使用PyDLL
。test.cpp
test.py
输出: