分段错误将文本呈现到开罗上下文
Segmentation fault rendering text to cairo context
这是我第一次使用pangomm,我正在尝试将一些文本渲染到Cairo::Context,但是当我尝试从Pango::Layout对象访问任何内容时,程序会抛出以下错误:
(process:7175): glibmm-CRITICAL **: 15:36:58.578: Glib::ObjectBase* Glib::wrap_create_new_wrapper(GObject*): assertion 'wrap_func_table != nullptr' failed
(process:7175): glibmm-WARNING **: 15:36:58.578: Failed to wrap object of type 'PangoLayout'. Hint: this error is commonlycaused by failing to call a library init() function.
[1] 7175 segmentation fault ./a.out
我无法使用 gdb 回溯错误。
法典
#include <cairomm/cairomm.h>
#include <pangomm.h>
int main() {
auto surf = Cairo::ImageSurface::create(Cairo::Format::FORMAT_ARGB32, 1920, 20);
auto cr = Cairo::Context::create(surf);
cr->set_source_rgb(0.0, 0.0, 0.0);
cr->paint();
cr->move_to(0.0, 0.0);
cr->set_source_rgb(1.0, 1.0, 1.0);
auto layout = Pango::Layout::create(cr);
auto font = Glib::ustring("Sans Bold 27");
Pango::FontDescription desc(font);
layout->set_font_description(desc);
auto text = Glib::ustring("Oi");
layout->set_text(text);
layout->show_in_cairo_context(cr);
surf->write_to_png("test.png");
return 0;
}
编译命令
g++ -g -Wall `pkg-config --cflags cairomm-1.0 pangomm-1.4` main.cpp `pkg-config --libs cairomm-1.0 pangomm-1.4`
由于您使用pangomm
而不使用 Gtk,因此您需要在程序开始时初始化pangomm
。这也初始化了Glib。呼叫Pango::init();
并包括<pangomm/init.h>
。
因此,您的代码成为
...
#include <pangomm/init.h>
int main()
{
Pango::init();
...
}
相关文章:
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 错误"Could not find Boost"(缺少:上下文标头)
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- MSVC 在不知道类型的情况下评估上下文(和错误)
- 关于 GetDIBits 和设备上下文的奇怪错误
- 自定义删除器,用于shared_ptr<>给出"无上下文错误"
- Linux/QT-错误创建SSL上下文(错误:140A90C4 ..)
- 分段错误将文本呈现到开罗上下文
- 在spirit parser Action中,在上下文参数上编译boost :: bind(成员函数)上的错误
- OpenGL 上下文创建期间未记录的错误
- 如何修复C#应用程序中调用C++DLL函数时的上下文加载错误
- 带有 QT 错误的 OpenGL:ASSERT:"QOpenGLFunctions::isInitialized(d_ptr)" 。无法创建 OpenGL 上下文
- 当任何子线程导致错误时,上下文切换到主线程
- 带有模板的矢量在打印上下文时在瓦尔格林德中给出错误
- C++上下文错误
- 渲染自定义模型时出现c++Directx 11设备上下文错误
- 此上下文标记中的错误可能会标记错误的位置
- 类声明错误:上下文信息不足,无法确定类型
- 激活上下文生成失败.VC运行时错误
- VS 2013 单元测试不起作用 =设置执行上下文时出现>错误