如何解决C++ CIMG突然停止打开显示
我已经从事 C++ 项目有一段时间了。我每次都用相同的方法打开显示,将设置的路径传递到 CImg<unsigned char>
,然后将该对象传递到 CImgdisplay
,非常标准,并且每次都有效。然后,我开始通过命令行参数传递路径,这也非常有效。然而,一旦我切换回硬编码路径以便在 VS Code 中使用调试器,程序开始吐出一个非常描述性的错误:
在进行了一些挖掘之后,我发现了对错误的更好描述:
[CImg] *** CImgdisplayException *** [instance(0,[untitled])] CImgdisplay::assign(): Failed to open X11 display.
libc++abi.dylib: terminating with uncaught exception of type cimg_library::CImgdisplayException: [instance(0,[untitled])] CImgdisplay::assign(): Failed to open X11 display.
从命令行运行程序时(完美编译),错误是 Segmentation fault: 11
。
我尝试在网上查找相同的错误,甚至与 CIMG 无关,因为这是与 X11 相关的错误,但找不到任何内容。当我注释掉整个 main 函数而不是两个图像和显示声明行时,错误仍然存在。代码如下:
#define cimg_use_png
#include "CImg.h"
#include <vector>
#include <algorithm>
#include <iostream>
using namespace cimg_library;
using namespace std;
int main(/*int argc,char *argv[]*/) {
//CImg<unsigned char> og_pic(argv[1]),first_anim(og_pic.width(),og_pic.height(),1,3,127);
CImg<unsigned char> og_pic("/Users/glebsvarcer/Desktop/my-stupid-little-programs/maze_solver/test13.png");
CImgdisplay disp(og_pic,"Test");
return 0;
}
我正在编译
clang++ -g /Users/glebsvarcer/Desktop/my-stupid-little-programs/maze_solver/cleanup_pic.cpp -O2 -lm -pthread -I/usr/X11R6/include -L/usr/X11R6/lib -lm -pthread -lX11 -o cleanup -Dcimg_use_png -lpng && rm out.txt ; cleanup >> out.txt
可能是什么原因造成的?如果没有调试器,我真的无法继续进行项目,如果有人对此有解决方案,我将不胜感激。
解决方法
这里有很多事情似乎是错误的。
- 您是否安装了 XQuartz?
- 您能否运行
xterm
并正确显示? - 您真的在
/usr/X11R6
拥有 X11 吗?我从未在 Mac 上看到过。请尝试运行ls -lR /usr/X11R6
- 您是否尝试过在
clang++
命令中指定实际的 C++ 标准?例如。clang++ -std=c++11 ...
- 如果您想使用 X11,您应该在
-Dcimg_display
命令中指定clang++
- 您不需要在源文件中的
#define cimg_use_png
AND 在编译命令行中,只需在后者中进行,以便在任何其他 {{1}并且对于每个编译单元 - 如果你想使用PNG图片,你还应该在编译命令中链接
#includes
。即zlib
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。