С++ CIMG внезапно перестал открывать дисплей

Я уже довольно давно работаю над проектом С++. Я каждый раз открывал дисплей одним и тем же методом, передавая заданный путь в 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

Что может быть причиной этого? Я действительно не могу двигаться дальше в проекте без отладчика, и был бы очень признателен, если бы у кого-нибудь было решение этой проблемы.


person Dion    schedule 05.03.2021    source источник
comment
Установлена ​​ли ваша переменная среды DISPLAY?   -  person Mark Setchell    schedule 10.03.2021
comment
@MarkSetchell Не могли бы вы уточнить? Еще довольно новый. Я не настраивал его раньше, так как он просто работал.   -  person Dion    schedule 10.03.2021
comment
Прежде чем я это сделаю, не могли бы вы указать, какая у вас операционная система? А также используете ли вы IDE для программирования и как именно вы компилируете и запускаете приложение? Спасибо.   -  person Mark Setchell    schedule 10.03.2021
comment
@MarkSetchell Я использую macOS Catalina 10.15.7 и Visual Studio Code. Я компилирую через терминал с помощью команды в посте, а затем просто запускаю исполняемый файл. Если мне нужен отладчик, я компилирую с точками останова через VS Code той же командой   -  person Dion    schedule 10.03.2021


Ответы (1)


Здесь много вещей, которые кажутся неправильными.

  • Вы установили XQuartz?
  • Можете ли вы запустить xterm, и он отображается правильно?
  • У вас действительно есть X11 в /usr/X11R6? Я никогда не видел такого на Mac. Попробуйте запустить ls -lR /usr/X11R6
  • Вы пытались указать фактический стандарт С++ в своей команде clang++? Например. clang++ -std=c++11 ...
  • Вы должны указать -Dcimg_display в своей команде clang++, если хотите использовать X11
  • Вам не нужно #define cimg_use_png в исходном файле И в командной строке компиляции, просто сделайте это в последнем, чтобы это было сделано перед любым другим #includes и для каждой единицы компиляции.
  • Если вы хотите использовать изображения PNG, вы также должны связать zlib в команде компиляции. то есть -lz
person Mark Setchell    schedule 10.03.2021
comment
Любая удача/новости с этим? - person Mark Setchell; 15.03.2021