Bug 35131 - qgis не запускается: ошибка сегментирования
Summary: qgis не запускается: ошибка сегментирования
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: qgis (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Andrey Cherepanov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-07-04 18:26 MSK by Vera Blagoveschenskaya
Modified: 2018-12-22 00:24 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vera Blagoveschenskaya 2018-07-04 18:26:38 MSK
kworkstation 8.2 x86_64

# apt-get install qgis
$ /usr/bin/qgis %F

Result: Ошибка сегментирования

НЕ воспроизводится в P8
Comment 1 Grigory Ustinov 2018-08-08 18:57:34 MSK
Подтверждаю!
Comment 2 Ivan A. Melnikov 2018-12-17 13:24:01 MSK
Да, воспроизводится на сегодняшнем Сизифе.

Вот backtrace падения с установленными пакетами debuginfo для Qt:

#0  QByteArray::~QByteArray (this=<optimized out>, __in_chrg=<optimized out>) at ../../src/corelib/tools/qbytearray.h:469
#1  rawStringData (index=<optimized out>, mo=mo@entry=0x7ffff5c7e840 <QWidget::staticMetaObject>) at kernel/qmetaobject.cpp:161
#2  objectClassName (m=m@entry=0x7ffff5c7e840 <QWidget::staticMetaObject>) at kernel/qmetaobject.cpp:306
#3  QMetaObject::className (this=this@entry=0x7ffff5c7e840 <QWidget::staticMetaObject>) at kernel/qmetaobject.cpp:316
#4  0x00007fffeb23eab7 in QMetaTypeIdQObject<QWidget*, 8>::qt_metatype_id () at ../../src/corelib/kernel/qmetatype.h:1804
#5  0x00007fffeb1e40a7 in QMetaTypeId2<QWidget*>::qt_metatype_id () at ../../src/corelib/kernel/qmetatype.h:1634
#6  qMetaTypeId<QWidget*> () at ../../src/corelib/kernel/qmetatype.h:1770
#7  qRegisterMetaType<QWidget*> () at ../../src/corelib/kernel/qmetatype.h:1776
#8  qRegisterWidgetsVariant () at kernel/qwidgetsvariant.cpp:156
#9  (anonymous namespace)::qRegisterWidgetsVariant_ctor_class_::qRegisterWidgetsVariant_ctor_class_ (this=<optimized out>) at kernel/qwidgetsvariant.cpp:160
#10 __static_initialization_and_destruction_0 (__priority=65535, __initialize_p=1) at kernel/qwidgetsvariant.cpp:160
#11 _GLOBAL__sub_I_qwidgetsvariant.cpp(void) () at kernel/qwidgetsvariant.cpp:160
#12 0x00007ffff7fe313a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffde78, env=env@entry=0x7fffffffde88) at dl-init.c:72
#13 0x00007ffff7fe3236 in call_init (env=0x7fffffffde88, argv=0x7fffffffde78, argc=1, l=<optimized out>) at dl-init.c:30
#14 _dl_init (main_map=0x7ffff7ffe130, argc=1, argv=0x7fffffffde78, env=0x7fffffffde88) at dl-init.c:119
#15 0x00007ffff7fd50ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#16 0x0000000000000001 in ?? ()
#17 0x00007fffffffe241 in ?? ()
#18 0x0000000000000000 in ?? ()

А вот без debuginfo:
#0  0x00007fffea4ae877 in QMetaObject::className() const () from /usr/lib64/libQt5Core.so.5
#1  0x00007fffeb271ab7 in ?? () from /usr/lib64/libQt5Widgets.so.5
#2  0x00007fffeb2170a7 in ?? () from /usr/lib64/libQt5Widgets.so.5
#3  0x00007ffff7fe313a in call_init.part () from /lib64/ld-linux-x86-64.so.2
#4  0x00007ffff7fe3236 in _dl_init () from /lib64/ld-linux-x86-64.so.2
#5  0x00007ffff7fd50ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#6  0x0000000000000001 in ?? ()
#7  0x00007fffffffe89b in ?? ()
#8  0x0000000000000000 in ?? ()

Как видите, падает инициализация Qt5. Вопрос в том, почему Qt5 инициализируется, ведь qgis, по крайней мере второй, вроде использовал Qt4. Однако у нас в него загружаются обе версии qt:

$ ldd /usr/bin/qgis | grep -i qt
        libQtCore.so.4 => /usr/lib64/libQtCore.so.4 (0x00007f64f2f0b000)
        libQtGui.so.4 => /usr/lib64/libQtGui.so.4 (0x00007f64f2387000)
        libQtSql.so.4 => /usr/lib64/libQtSql.so.4 (0x00007f64f1627000)
        libQtUiTools.so.4 => /usr/lib64/libQtUiTools.so.4 (0x00007f64f138f000)
        libQtWebKit.so.4 => /usr/lib64/libQtWebKit.so.4 (0x00007f64eefc2000)
        libqscintilla2_qt4.so.13 => /usr/lib64/libqscintilla2_qt4.so.13 (0x00007f64ed50a000)
        libQtXml.so.4 => /usr/lib64/libQtXml.so.4 (0x00007f64ed2cf000)
        libQtNetwork.so.4 => /usr/lib64/libQtNetwork.so.4 (0x00007f64ecfcb000)
        libQtSvg.so.4 => /usr/lib64/libQtSvg.so.4 (0x00007f64ecd80000)
        libQt5PrintSupport.so.5 => /usr/lib64/libQt5PrintSupport.so.5 (0x00007f64e8fc4000)
        libQt5Svg.so.5 => /usr/lib64/libQt5Svg.so.5 (0x00007f64e8d6e000)
        libQt5OpenGL.so.5 => /usr/lib64/libQt5OpenGL.so.5 (0x00007f64e8b18000)
        libQt5Widgets.so.5 => /usr/lib64/libQt5Widgets.so.5 (0x00007f64e82e6000)
        libQt5Gui.so.5 => /usr/lib64/libQt5Gui.so.5 (0x00007f64e7b56000)
        libQt5Core.so.5 => /usr/lib64/libQt5Core.so.5 (0x00007f64e7452000)
        libQtOpenGL.so.4 => /usr/lib64/libQtOpenGL.so.4 (0x00007f64e61e4000)

Что-то мне подсказывает, что так нельзя делать.

На первый взгляд, Qt5 приезжает вместе с libqwt.so.6. И тут внезапное: у libqwt.so.6 2 несовместимых между собой провайдера:

$ apt-cache showpkg 'libqwt.so.6()(64bit)'
[...]
Reverse Provides:
libqwt6-qt5 6.1.3-alt1
libqwt6 6.1.3-alt1

И у меня в системе, естественно, был libqwt6-qt5, а не слинкованый с qt4 libqwt6.

apt-get install libqwt6 не только поставил нужный qgis-у libqwt6, но и снёс libqwt6-qt5. Это решило начальную проблему: qgis больше не падает.

Резюмируя:
* apt-get install libqwt6 -- и будет вам qgis.
* libqwt6 собран очень странно -- две несовместимых друг с другом библиотеки в одном Сизифе с одним soname это очень плохо, надо вешать.
* мейнтейнеру qgis, видимо, стоит добавить в спек явную зависимость на libqwt6, чтобы libqwt6-qt5 не приезжала. Может даже конфликт =)
Comment 3 Anton Farygin 2018-12-17 14:21:29 MSK
Нужно поменять зависимости у qgis.
Comment 4 Repository Robot 2018-12-22 00:24:45 MSK
qgis-2.18.16-alt4 -> sisyphus:

Thu Dec 20 2018 Andrey Cherepanov <cas@altlinux> 2.18.16-alt4
- Rebuild with grass 7.4.3.
- Require libqwt6 (ALT #35131).