【问题标题】:cairo_debug_reset_static_data() issue using pango librarycairo_debug_reset_static_data() 使用 pango 库的问题
【发布时间】:2020-03-08 19:49:39
【问题描述】:

当我将 pango lib 和 cairo 结合起来时,我遇到了 cairo_debug_reset_static_data() 函数的问题,因为我在调用它时得到了以下断言。

draw: cairo-hash.c:217: _cairo_hash_table_destroy: Assertion `hash_table->live_entries == 0' 失败。

这是我从以下post 中获取的代码:其中有人遇到了类似的问题,但他们没有在那里分享任何可行的解决方案(我已经尝试过帖子中的解决方案,但它不起作用)。如果我们删除注释行,那么就会有断言。

#include <cairo.h>
#include <pango/pangocairo.h>

int
main (int argc, char *argv[])
{
    cairo_surface_t *surface;
    cairo_t *context;

    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 120, 120);
    context = cairo_create(surface);

    PangoRectangle extents;
    PangoLayout *layout;
    PangoFontDescription *desc;

    layout = pango_cairo_create_layout (context);

    desc = pango_font_description_from_string("Inconsolata 12");
    pango_layout_set_font_description(layout, desc);
    pango_font_description_free(desc);

    pango_layout_set_markup(layout, "hello", -1);
    //pango_layout_get_pixel_extents(layout, &extents, NULL);

    //pango_cairo_show_layout(context, layout);

    g_object_unref(layout);
    cairo_destroy(context);
    cairo_surface_destroy(surface);

    cairo_debug_reset_static_data();

    return(0);
}

我试图解决这个问题,也搜索了他们的文档,但找不到任何有用的东西。对pangocairo有专业知识的人,请给我一些启发并指出正确的方向。

谢谢

【问题讨论】:

    标签: cairo pangocairo


    【解决方案1】:

    这是我从以下post 中获取的代码:其中有人遇到了类似的问题,但他们没有在那里分享任何可行的解决方案。

    嗯,你看到那个帖子的reply了吗?它包含修复此断言失败所需了解的所有内容:

    在调用之前添加对pango_cairo_font_map_set_default(NULL);的调用 cairo_debug_reset_static_data();。这使得 PangoCairo 不引用字体 它还活着。

    【讨论】:

    • 感谢您的回复。我在发帖之前按照 cmets 做了,但没有解决。
    • 明确一点:您尝试了此解决方案,但它对您不起作用?对我和你的例子来说,它肯定在这里工作......
    • 我明白了。是的,它对我不起作用。能分享一下你是怎么测试的吗?像 OS、IDE、Compiler 等,以及 valgrind 版本、标志等。我会像你一样尝试重播。
    • 当前 Debian 在 amd64 上的测试。我刚刚使用gcc test.c $(pkg-config --cflags --libs pangocairo) 编译了您的示例(添加了两条注释掉的行)。该程序在运行时因断言失败而死亡。然后我在调用cairo_debug_reset_static_data() 之前添加了对pango_cairo_font_map_set_default(NULL); 的调用。再次编译运行程序,就正常退出了。
    • 我和 IDE 不涉及 valgrind ......好吧,我使用 gVim 作为文本编辑器。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多