LD_LIBRARY_PATH работает, но ldconfig не

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, и я ищу обходные пути. Любая помощь?

0
задан 11 June 2020 в 14:30

1 ответ

Это была ошибка / дефект 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 . Я не думаю, что это рекомендуемое решение, но оно работает. Обязательно создайте резервную копию.

0
ответ дан 19 June 2020 в 21:26

Другие вопросы по тегам:

Похожие вопросы: