微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ CIMG突然停止打开显示

如何解决C++ CIMG突然停止打开显示

我已经从事 C++ 项目有一段时间了。我每次都用相同的方法打开显示,将设置的路径传递到 CImg<unsigned char>,然后将该对象传递到 CImgdisplay,非常标准,并且每次都有效。然后,我开始通过命令行参数传递路径,这也非常有效。然而,一旦我切换回硬编码路径以便在 VS Code 中使用调试器,程序开始吐出一个非常描述性的错误

Exception has occurred

在进行了一些挖掘之后,我发现了对错误的更好描述:

[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 举报,一经查实,本站将立刻删除。