Hallo zusammen,
heute habe ich zum ersten Mal seit meinem Upgrade auf Ubuntu 18.04 versucht, an einem meiner aktuellen Programmierprojekte weiterzuarbeiten. (Programmiersprache: GNU C++; GUI-Bibliothek: Qt5; keine integrierte Entwicklungsumgebung – nur Texteditor und "make" per Kommandozeile.)
Ergebnis: Das neue Compilat stürzt bei Aufruf sofort ab. Soweit ich es bislang zurückverfolgen konnte, erfolgt dieser Absturz noch _vor_ dem Aufruf von main().
gdb liefert mir einen etwas obskuren Backtrace:
#0 0xb7fd6d09 in __kernel_vsyscall () #1 0xb6cd8832 in __libc_signal_restore_set (set=0xbfffeccc) at ../sysdeps/unix/sysv/linux/nptl-signals.h:80 #2 0xb6cd8832 in __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:48 #3 0xb6cd9cc1 in __GI_abort () at abort.c:79 #4 0xb6d1abd3 in __libc_message (action=do_abort, fmt=<optimized out>) at ../sysdeps/posix/libc_fatal.c:181 #5 0xb6d217ed in malloc_printerr (str=str@entry=0xb6e2a110 "realloc(): invalid pointer") at malloc.c:5350 #6 0xb6d265ba in __GI___libc_realloc (oldmem=0xb7431434 <QListData::shared_null>, bytes=32) at malloc.c:3174 #7 0xb608cfdb in QListData::realloc_grow(int) () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #8 0xb608d0a6 in QListData::append(int) () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #9 0xb608d13a in QListData::append() () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #10 0xb616b05e in () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #11 0xb6165e50 in qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*) () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #12 0xb601e4db in () at /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 #13 0xb7fe77db in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@ent---Type <return> to continue, or q <return> to---Type <return> to continue, or q <return> to quit--- ry=0xbffff244, env=0xbffff24c) at dl-init.c:72 #14 0xb7fe78de in call_init (env=0xbffff24c, argv=0xbffff244, argc=1, l=<optimized out>) at dl-init.c:30 #15 0xb7fe78de in _dl_init (main_map=<optimized out>, argc=1, argv=0xbffff244, env=0xbffff24c) at dl-init.c:119 #16 0xb7fd8cba in _dl_start_user () at /lib/ld-linux.so.2
Besonders verrückt: Die alte, noch unter Ubuntu 16.04 erzeugte Binary funktioniert anstandslos weiter. Zur Unterscheidung nenne ich ab hier die alte, funktionierende Binary "Compilat A" und die neue, abstürzende Binary "Compilat B".
Ich habe nun ldd über beide Binaries laufen lassen und die Ergebnisse unterscheiden sich erheblich. Bei Compilat A ist der Output von ldd deutlich kürzer als bei B. Näheres Hinsehen ergibt, dass bei B insbesondere die Qt-Bibliotheken anscheinend parallel in zwei Versionen angelinkt werden (z.B. libQtSql und danach noch mal libQt5Sql), wohingegen bei A alles eindeutig erscheint.
Leider enden an dieser Stelle auch meine Systemkenntnisse, um das genauer auszuwerten. Daher meine Frage in die Runde: Habt ihr eine Ahnung, was hier los ist und wie ich es beheben könnte?
Hier sind der Vollständigkeit halber die beiden ldd-Outputs, einmal für Compilat A:
linux-gate.so.1 (0xb7fa8000) libgerqutils.so.1 => /usr/lib/libgerqutils.so.1 (0xb7f65000) libgerphys.so.1 => /usr/lib/libgerphys.so.1 (0xb7f5e000) libQt5Widgets.so.5 => /usr/lib/i386-linux-gnu/libQt5Widgets.so.5 (0xb7845000) libQt5Gui.so.5 => /usr/lib/i386-linux-gnu/sse2/libQt5Gui.so.5 (0xb728a000) libQt5Sql.so.5 => /usr/lib/i386-linux-gnu/libQt5Sql.so.5 (0xb7232000) libQt5Core.so.5 => /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 (0xb6cb7000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6b31000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6a2f000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6a11000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6835000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6814000) libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xb67b3000) libpng16.so.16 => /usr/lib/i386-linux-gnu/libpng16.so.16 (0xb6779000) libharfbuzz.so.0 => /usr/lib/i386-linux-gnu/libharfbuzz.so.0 (0xb66d0000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb66b1000) libicui18n.so.60 => /usr/lib/i386-linux-gnu/libicui18n.so.60 (0xb63e8000) libicuuc.so.60 => /usr/lib/i386-linux-gnu/libicuuc.so.60 (0xb6229000) libdouble-conversion.so.1 => /usr/lib/i386-linux-gnu/libdouble-conversion.so.1 (0xb6214000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb620f000) libglib-2.0.so.0 => /usr/lib/i386-linux-gnu/libglib-2.0.so.0 (0xb60df000) /lib/ld-linux.so.2 (0xb7faa000) libGLX.so.0 => /usr/lib/i386-linux-gnu/libGLX.so.0 (0xb60ba000) libGLdispatch.so.0 => /usr/lib/i386-linux-gnu/libGLdispatch.so.0 (0xb605b000) libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb5f9e000) libgraphite2.so.3 => /usr/lib/i386-linux-gnu/libgraphite2.so.3 (0xb5f6f000) libicudata.so.60 => /usr/lib/i386-linux-gnu/libicudata.so.60 (0xb45c5000) libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb454e000) libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb4404000) libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb43d8000) libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb43d4000) libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb43cd000) libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xb43b0000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb43a6000)
... und für Compilat B:
linux-gate.so.1 (0xb7faf000) libgerqutils.so.1 => /usr/lib/libgerqutils.so.1 (0xb7f52000) libgerphys.so.1 => /usr/lib/libgerphys.so.1 (0xb7f4b000) libQtSql.so.4 => /usr/lib/i386-linux-gnu/libQtSql.so.4 (0xb7f0a000) libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb73f2000) libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb70ec000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6f66000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6e64000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6e46000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6c6a000) libQt5Widgets.so.5 => /usr/lib/i386-linux-gnu/libQt5Widgets.so.5 (0xb6551000) libQt5Sql.so.5 => /usr/lib/i386-linux-gnu/libQt5Sql.so.5 (0xb64f7000) libQt5Core.so.5 => /usr/lib/i386-linux-gnu/sse2/libQt5Core.so.5 (0xb5f7c000) libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb5f31000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb5f12000) libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb5ef6000) libglib-2.0.so.0 => /usr/lib/i386-linux-gnu/libglib-2.0.so.0 (0xb5dc6000) libpng16.so.16 => /usr/lib/i386-linux-gnu/libpng16.so.16 (0xb5d8c000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb5d6d000) libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb5cb0000) libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb5c50000) libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb5c47000) libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb5c29000) libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xb5c16000) libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb5c0a000) libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb5bf5000) libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb5aab000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb5aa6000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb5a9c000) /lib/ld-linux.so.2 (0xb7fb1000) libQt5Gui.so.5 => /usr/lib/i386-linux-gnu/sse2/libQt5Gui.so.5 (0xb54e1000) libicui18n.so.60 => /usr/lib/i386-linux-gnu/libicui18n.so.60 (0xb5218000) libicuuc.so.60 => /usr/lib/i386-linux-gnu/libicuuc.so.60 (0xb5059000) libdouble-conversion.so.1 => /usr/lib/i386-linux-gnu/libdouble-conversion.so.1 (0xb5042000) libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb5010000) libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb4fa9000) libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb4fa5000) libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb4f2e000) libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb4f25000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb4f1c000) libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xb4f01000) libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb4ed5000) libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xb4e74000) libharfbuzz.so.0 => /usr/lib/i386-linux-gnu/libharfbuzz.so.0 (0xb4dc9000) libicudata.so.60 => /usr/lib/i386-linux-gnu/libicudata.so.60 (0xb341f000) libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb3418000) libGLX.so.0 => /usr/lib/i386-linux-gnu/libGLX.so.0 (0xb33f5000) libGLdispatch.so.0 => /usr/lib/i386-linux-gnu/libGLdispatch.so.0 (0xb3396000) libgraphite2.so.3 => /usr/lib/i386-linux-gnu/libgraphite2.so.3 (0xb3367000)
Vielen Dank im Voraus!