【发布时间】:2021-03-05 06:32:49
【问题描述】:
我现在从事 C++ 项目已经有一段时间了。我每次都用相同的方法打开显示器,将设置的路径传递给CImg<unsigned char>,然后将该对象传递给CImgDisplay,非常标准,并且每次都有效。然后,我开始通过命令行参数传递路径,这也非常有效。然而,一旦我切换回硬编码路径以便在 VS Code 中使用调试器,程序开始吐出一个非常描述性的错误:
在做了一些挖掘之后,我发现了一个更好的错误描述:
[CImg] *** CImgDisplayException *** [instance(0,0,0,[untitled])] CImgDisplay::assign(): Failed to open X11 display.
libc++abi.dylib: terminating with uncaught exception of type cimg_library::CImgDisplayException: [instance(0,0,0,[untitled])] CImgDisplay::assign(): Failed to open X11 display.
从命令行运行程序时(编译完美),错误是Segmentation fault: 11。
我尝试在网上查找相同的错误,甚至与 CIMG 无关,因为这是与 X11 相关的错误,但找不到任何东西。当我注释掉整个主函数而不是两个图像和显示声明行时,错误仍然存在。代码如下:
#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
这可能是什么原因造成的?如果没有调试器,我真的无法在项目中继续前进,如果有人对此有解决方案,我将不胜感激。
【问题讨论】:
-
你的
DISPLAY环境变量设置了吗? -
@MarkSetchell 你能澄清一下吗?还是蛮新的。我以前没有配置过它,因为它很好用。
-
在我这样做之前,您能说明一下您的操作系统是什么吗?还有你是否使用编程 IDE 以及你是如何编译和运行应用程序的?谢谢。
-
@MarkSetchell 我使用 macOS Catalina 10.15.7 和 Visual Studio Code。我使用帖子中的命令通过终端进行编译,然后运行可执行文件。如果我需要调试器,我会通过 VS Code 使用相同的命令进行断点编译