使用某些静态库时,在cairo中出现Seg错误
Seg fault in cairo when using some static libraries
我有以下例程用于截图:
void take_screenshot(const std::string & file_name)
{
Display *disp;
Window root;
cairo_surface_t *surface;
int scr;
disp = XOpenDisplay(nullptr);
scr = DefaultScreen(disp);
root = DefaultRootWindow(disp);
surface = cairo_xlib_surface_create(disp, root, DefaultVisual(disp, scr),
DisplayWidth(disp, scr),
DisplayHeight(disp, scr));
cairo_surface_write_to_png(surface, file_name.c_str()); // <-- here is the seg fault
cairo_surface_destroy(surface);
}
这个例程取自https://stackoverflow.com/users/436275/uli-schlachter对这个问题的回答,使用Xlib和Cairo库制作屏幕截图[fail](归功于作者)
这个例程是collector
程序的一部分。链接如下:
clang -o collector -g -O2 -fno-strict-aliasing collector.o common-vars.o
collector-events.o listeners.o active_window.o
../lib/libperfq-common.a -lPocoNet -lPocoFoundation -luiohook
-lstdc++ -lgsl -lgslcblas -lm -lcairo -lXt -lXtst -lXinerama
-lX11 -lpthread -lc
到目前为止一切顺利。这个程序运行得很好。
但是,当我静态地链接poco和uiohook库时,程序在上面指示的行抛出一个seg错误。
静态链接poco和uiohook库的可执行文件如下所示:
clang -o collector -g -O2 -fno-strict-aliasing collector.o
common-vars.o collector-events.o listeners.o active_window.o
../lib/libperfq-common.a /home/lrleon/poco/lib/libPocoNet.a
/home/lrleon/poco/lib/libPocoFoundation.a
/home/lrleon/uiohook/lib/libuiohook.a -lstdc++ -lgsl -lgslcblas
-lm -lcairo -lXt -lXtst -lXinerama -lX11 -lpthread -lc
在这个版本中,我有一个段错误。在切换了一些动态库之后,用调试器观察,我确实知道是什么导致了错误。
我猜一些库静态链接使cairo_surface_write_to_png()
调用失败的事实。但我不知道为什么。
任何想法?提前感谢
我刚刚在linux上修补了一个由于xcb在2.1分支中的崩溃。这可能会解决您的问题,当2.1.1。我建议尝试不包含xcb的2.0,看看是否能解决您的问题。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 'PyCObject_Import(“cairo”,“CAPI”)“C++调用产生段错误,”import Cai
- 使用某些静态库时,在cairo中出现Seg错误