Я получаю sigabrt прямо в начале main()
когда я звоню:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);//here
...
Это обратный след
>~"#0 0x00007ffff1293cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56\n">~"#1 0x00007ffff12970d8 in __GI_abort () at abort.c:89\n">~"#2 0x00007ffff213a0be in QMessageLogger::fatal(char const*, ...) const () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n">~"#3 0x00007fffe78f7956 in QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) () from /opt/Qt/5.5/gcc_64/lib/libQt5XcbQpa.so.5\n">~"#4 0x00007fffe78fb066 in QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) () from /opt/Qt/5.5/gcc_64/lib/libQt5XcbQpa.so.5\n">~"#5 0x00007fffe7c0e39b in ?? () from /opt/Qt/5.5/gcc_64/plugins/platforms/libqxcb.so\n">~"#6 0x00007ffff2e5f762 in QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n">~"#7 0x00007ffff2e6a9a8 in QGuiApplicationPrivate::createPlatformIntegration() () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n">~"#8 0x00007ffff2e6b75d in QGuiApplicationPrivate::createEventDispatcher() () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n">~"#9 0x00007ffff233da36 in QCoreApplication::init() () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n">~"#10 0x00007ffff233da96 in QCoreApplication::QCoreApplication(QCoreApplicationPrivate&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n">~"#11 0x00007ffff2e6d9a9 in QGuiApplication::QGuiApplication(QGuiApplicationPrivate&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n">~"#12 0x00007ffff5ca392d in QApplication::QApplication(int&, char**, int) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5\n">~"#13 0x0000000000435889 in main (argc=1, argv=0x7fffffffec48) at ..../gui/main.cpp:14\n"
Ранее код работал нормально (несколько минут назад), я проверил md5 библиотек и сравнил его с другим ПК (с теми же библиотеками, с хорошо работающим приложением) — различий не обнаружено.
Я нашел некоторые ошибка, но не уверен, что это связано.
Я создал новый проект Qt и он работает нормально — main()
выглядит одинаково (разные включает, библиотечные зависимости).
Есть идеи, что мне попробовать дальше?
ОБНОВИТЬ:
Клянусь, я ничего не менял, я проверял с помощью git diff — empty. Этот коммит я использую долгое время — он отлично работал в течение нескольких дней.
Это сообщение, которое оно отображает:
QXcbConnection: не удалось подключиться к дисплею
Также — когда я запускаю из терминала ./app работает нормально,
при запуске из GDB работает нормально ..
но не может работать из QtCreator-gdb или просто без gdb из QtCreator (Ctrl + R) ..
И теперь он делает ту же ошибку на другом компьютере — только что установленный Qt 5.5, только что собранный, и заново собирающий другие библиотеки ..
Затем я удалил весь Shadow Dir и восстановить, и ошибка исчезла .. странно.
Я сделал то же самое rm -rf shadow-dir/*
и запустить qmake и собрать на моем исходном компьютере — та же ошибка.
Сообщение QXcbConnection: Could not connect to display
означает, что приложению не удалось подключиться к X Display. В этом случае имя дисплея, к которому он пытался подключиться, пусто (имя должно следовать за сообщением).
Отображаемое имя может быть передано приложению с помощью переменной среды DISPLAY
или он может быть перезаписан аргументом командной строки приложения -display ' '
:
./app-binary -display ' '
Проверьте правильность DISPLAY
значение в оболочке:
echo $DISPLAY
Проверьте значение этой переменной в вашем приложении во время выполнения до QApplication app(argc, argv);
в Qt Creator распечатав:
qDebug() << qgetenv("DISPLAY");
// or
qDebug() << QProcessEnvironment::systemEnvironment().toStringList();
Эта печать должна содержать что-то вроде "DISPLAY=:0"
(то же значение, что и во время выполнения из оболочки).
Опции проекта Qt creator могут перезаписывать системную среду.
Других решений пока нет …