gpt4 book ai didi

c++ - 'PyCObject_Import ("cairo", "CAPI")' C++ call yields segfault, ' import cairo' 在 python 上有效

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:36 27 4
gpt4 key购买 nike

我正在运行 OSX Lion 并尝试为 goocanvas 导入 python 模块, 使用 python2.7.

我设法成功编译了 pygoocanvas-0.14.1,但是当我尝试通过 python2.7 控制台import goocanvas 时,出现段错误。经过一些调试后,我得到了这段代码:

DL_EXPORT (void)
initgoocanvas (void)
{
PyObject *m, *d;
fprintf(stderr,"init<< \n");

// Pycairo_IMPORT; // XXX removed, it expands to the line below, anyways
Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import("cairo", "CAPI"); // ADDED XXX

fprintf(stderr,"after import<< \n");
if (Pycairo_CAPI == NULL) {
return;
}

我发现当 goocanvas python 模块的 C++ 代码试图通过 PyCObject_Import("cairo", "CAPI") 导入“cairo”库时会发生段错误。但是,如果我尝试通过 import cairo 直接通过 python2.7 控制台导入 cairo 模块,它会起作用。

我应该如何进行?我有一个盲段错误,不知道为什么会发生。记得我设法编译了 python goocanvas 模块,但在尝试将其导入 python 时出现段错误。

最佳答案

您使用的是哪种控制台?我认为 gtk/glib 有一些钩子(Hook)可以让主循环与 REPL 同时运行。这意味着线程正在使用中,如果未调用 glib.threads_init() 可能会导致崩溃。

恕我直言,这是设计使然,因为只要导入 glib 或任何 g* 模块,使用任何线程的理智 Python 程序就会突然开始出现段错误。支持线程应该是默认的。

在我们的案例中,崩溃是由 glib 的日志系统引起的,它在没有持有 GIL 的情况下转发给 Python。

关于c++ - 'PyCObject_Import ("cairo", "CAPI")' C++ call yields segfault, ' import cairo' 在 python 上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366852/

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