Qt, пока 5.13 не обнаружит странную ошибку для меня, поэтому я попытался изменить библиотеку версия Qt до самой последней версии (5.15). Я установил библиотеки Qt 5.15 в /home/myaccount/Qt/5.15.0/gcc_64/lib
и настроил /etc/ld.so.conf.d/Qt.5.15.0. conf
соответственно. Вот результат ldd usr / bin / konsole
:
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Widgets.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Gui.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5PrintSupport.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Xml.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5DBus.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Network.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5X11Extras.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Svg.so.5)
/usr/bin/konsole: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5TextToSpeech.so.5)
linux-vdso.so.1 (0x00007ffdc6592000)
libkdeinit5_konsole.so => /lib/x86_64-linux-gnu/libkdeinit5_konsole.so (0x00007f01a80dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f01a7eea000)
libkonsoleprivate.so.19 => /lib/x86_64-linux-gnu/libkonsoleprivate.so.19 (0x00007f01a7d79000)
...
libQt5Widgets.so.5 => /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Widgets.so.5 (0x00007f01a6e95000)
libQt5Gui.so.5 => /home/myaccount/Qt/5.15.0/gcc_64/lib/libQt5Gui.so.5 (0x00007f01a6561000)
libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f01a6016000)
...
Похоже, программы (в данном случае konsole) по-прежнему загружают более старую библиотеку из / lib / x86_64-linux-gnu /
. Странно то, что только libQt5Core имеет эту проблему, в то время как другие библиотеки Qt загружены правильно.
Если я сделаю что-то вроде LD_LIBRARY_PATH = "/ home / myaccount / Qt / 5.15.0 / gcc_64 / lib /" / usr / bin / konsole
Затем он работает правильно. Но Ubuntu 20.04 не нравится установка LD_LIBRARY_PATH из .profile, и я ищу обходные пути. Любая помощь?
Это была ошибка / дефект ldconfig, исправленная здесь: https://bugs.freedesktop.org/ show_bug.cgi? id = 26663
Короче говоря, ldconfig полностью игнорирует приоритет библиотеки при задании тега ABI OS. Тег ABI операционной системы библиотеки qt по умолчанию был 3.17.0, а библиотека 5.15.0 - 2.6.28. Это ставит Системную библиотеку qt по умолчанию всегда перед библиотекой 5.15.0 в иерархии ldconfig. Это можно подтвердить с помощью ldconfig -p
.
Обходное решение, которое я выбрал, - это исправление тега OS ABI библиотеки 5.15.0. В этом случае я использовал команды:
echo -en "\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4e\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00" > patch.txt
objcopy --update-section .note.ABI-tag=patch.txt /home/myaccount/Qt/5.15.0/gcc_64/libQt5Core.so.5.15.0 patched.so
, а затем заменил libQt5Core.so.5.15.0
на patched.so
. Я не думаю, что это рекомендуемое решение, но оно работает. Обязательно создайте резервную копию.