Как сделать доступным libQtCore v5.10.1 моего дистрибутива, когда поставляется приложение v5.6?

483
Rob Waa

1) Когда я запускаю Understand из командной строки, я вижу следующее. Все нормально. :

[me@box1 ~]# understand 

2) Под заголовком «Начало работы» на вкладке «Начало работы»:

когда я нажимаю на любую из ссылок "Понимать справку ...", "Понимать часто задаваемые вопросы ...", "Понимать справку по Perl API ...", "Понимать справку по Python API ..." и "Поддержка SciTools .." . ", а также по тем же ссылкам в меню" Справка ", затем в окно терминала добавляются следующие ошибки и ничего не происходит:

[me@box1 4.4.19 vpn-client]# understand kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by kde-open5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5KIOWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5KIOCore.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5I18n.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5CoreAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5JobWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Service.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Completion.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5IconThemes.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5WindowSystem.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigWidgets.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5WidgetsAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigGui.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ConfigCore.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5DBus.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5DBusAddons.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Auth.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5X11Extras.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libQt5Svg.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Archive.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5ItemViews.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5Codecs.so.5) kde-open5: /home/me/bin/scitools/bin/linux64/libQt5Core.so.5: version 'Qt_5.10' not found (required by /usr/lib/libKF5GuiAddons.so.5) 

3) qmakeсообщает мне, что Qt v5.10.1 установлен моим дистрибутивом (Arch Linux):

[me@box1 ~]# qmake -version QMake version 3.1 Using Qt version 5.10.1 in /usr/lib 

4) readelfсообщает мне (и подтверждает qmakeвывод), что на моем дистрибутиве установлен Qt Core v5.10.1:

[me@box1 ~]# readelf -V /usr/lib/libQt5Core.so.5.10.1 | grep -ie 'Qt_5\.' d7c: 9h(Qt_5.5) bh(Qt_5.7) e (Qt_5.10) 3 (Qt_5)  d80: 5h(Qt_5.1) ch(Qt_5.8) 7h(Qt_5.3) 8h(Qt_5.4)  d84: ah(Qt_5.6) dh(Qt_5.9) 4h(Qt_5.0) 6h(Qt_5.2)  149c: 3 (Qt_5) e (Qt_5.10) 3 (Qt_5) 2 (Qt_5_PRIVATE_API)  14c0: 3 (Qt_5) 4 (Qt_5.0) 3 (Qt_5) 3 (Qt_5)  14c4: 3 (Qt_5) 3 (Qt_5) 5 (Qt_5.1) 3 (Qt_5)  14c8: 6 (Qt_5.2) 2 (Qt_5_PRIVATE_API) 7 (Qt_5.3) 3 (Qt_5)  14cc: 8 (Qt_5.4) 3 (Qt_5) 3 (Qt_5) 3 (Qt_5)  14d0: 3 (Qt_5) 3 (Qt_5) 9 (Qt_5.5) 3 (Qt_5)  14d4: 3 (Qt_5) a (Qt_5.6) 3 (Qt_5) 3 (Qt_5)  14d8: 3 (Qt_5) 2 (Qt_5_PRIVATE_API) b (Qt_5.7) 3 (Qt_5)  14dc: 2 (Qt_5_PRIVATE_API) 3 (Qt_5) c (Qt_5.8) 3 (Qt_5)  14e0: 3 (Qt_5) d (Qt_5.9) 3 (Qt_5) 2 (Qt_5_PRIVATE_API)  0x0054: Rev: 1 Flags: none Index: 4 Cnt: 2 Name: Qt_5.0 0x0078: Rev: 1 Flags: none Index: 5 Cnt: 2 Name: Qt_5.1 0x0094: Parent 1: Qt_5.0 0x009c: Rev: 1 Flags: none Index: 6 Cnt: 2 Name: Qt_5.2 0x00b8: Parent 1: Qt_5.1 0x00c0: Rev: 1 Flags: none Index: 7 Cnt: 2 Name: Qt_5.3 0x00dc: Parent 1: Qt_5.2 0x00e4: Rev: 1 Flags: none Index: 8 Cnt: 2 Name: Qt_5.4 0x0100: Parent 1: Qt_5.3 0x0108: Rev: 1 Flags: none Index: 9 Cnt: 2 Name: Qt_5.5 0x0124: Parent 1: Qt_5.4 0x012c: Rev: 1 Flags: none Index: 10 Cnt: 2 Name: Qt_5.6 0x0148: Parent 1: Qt_5.5 0x0150: Rev: 1 Flags: none Index: 11 Cnt: 2 Name: Qt_5.7 0x016c: Parent 1: Qt_5.6 0x0174: Rev: 1 Flags: none Index: 12 Cnt: 2 Name: Qt_5.8 0x0190: Parent 1: Qt_5.7 0x0198: Rev: 1 Flags: none Index: 13 Cnt: 2 Name: Qt_5.9 0x01b4: Parent 1: Qt_5.8 0x01bc: Rev: 1 Flags: none Index: 14 Cnt: 2 Name: Qt_5.10 0x01d8: Parent 1: Qt_5.9 

5) readelfсообщает мне, что Understand поставляется с Qt v5.6:

[me@box1 ~]# readelf -V /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 | grep -ie 'Qt_5\.' 9e8: 3 (Qt_5) 3 (Qt_5) 4 (Qt_5.0) 2 (Qt_5_PRIVATE_API)  9ec: 3 (Qt_5) 3 (Qt_5) 5 (Qt_5.1) 3 (Qt_5)  9f0: 6 (Qt_5.2) 3 (Qt_5) 2 (Qt_5_PRIVATE_API) 3 (Qt_5)  9f4: 2 (Qt_5_PRIVATE_API) 7 (Qt_5.3) 3 (Qt_5) 8 (Qt_5.4)  9f8: 3 (Qt_5) 3 (Qt_5) 9 (Qt_5.5) 3 (Qt_5)  9fc: 3 (Qt_5) 3 (Qt_5) a (Qt_5.6) 2 (Qt_5_PRIVATE_API)  d90: 3 (Qt_5) 5h(Qt_5.1) 4h(Qt_5.0) a (Qt_5.6)  d94: 8h(Qt_5.4) 9h(Qt_5.5) 6h(Qt_5.2) 7h(Qt_5.3)  0x0054: Rev: 1 Flags: none Index: 4 Cnt: 2 Name: Qt_5.0 0x0078: Rev: 1 Flags: none Index: 5 Cnt: 2 Name: Qt_5.1 0x0094: Parent 1: Qt_5.0 0x009c: Rev: 1 Flags: none Index: 6 Cnt: 2 Name: Qt_5.2 0x00b8: Parent 1: Qt_5.1 0x00c0: Rev: 1 Flags: none Index: 7 Cnt: 2 Name: Qt_5.3 0x00dc: Parent 1: Qt_5.2 0x00e4: Rev: 1 Flags: none Index: 8 Cnt: 2 Name: Qt_5.4 0x0100: Parent 1: Qt_5.3 0x0108: Rev: 1 Flags: none Index: 9 Cnt: 2 Name: Qt_5.5 0x0124: Parent 1: Qt_5.4 0x012c: Rev: 1 Flags: none Index: 10 Cnt: 2 Name: Qt_5.6 0x0148: Parent 1: Qt_5.5 

6) lddсообщает мне, что Understand будет использовать поставляемую версию Qt:

[me@box1 ~]# ldd /home/me/bin/scitools/bin/linux64/understand.bin | grep -ie 'scitools' libQt5Concurrent.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Concurrent.so.5 (0x00007f0a63b77000) libQt5Sql.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Sql.so.5 (0x00007f0a63af9000) libQt5Network.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Network.so.5 (0x00007f0a624dd000) libQt5Xml.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Xml.so.5 (0x00007f0a63abd000) libQt5PrintSupport.so.5 => /home/me/bin/scitools/bin/linux64/libQt5PrintSupport.so.5 (0x00007f0a63a4d000) libastyle.so => /home/me/bin/scitools/bin/linux64/libastyle.so (0x00007f0a6229a000) libQt5Widgets.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Widgets.so.5 (0x00007f0a61c12000) libQt5Gui.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Gui.so.5 (0x00007f0a61732000) libQt5Core.so.5 => /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 (0x00007f0a6117a000) 

7) Сценарий Bash, understandкоторый начинается understand.binсодержит следующее:

#!/bin/bash scriptdir=`dirname $0` export LD_LIBRARY_PATH=$scriptdir unset QT_PLUGIN_PATH $0.bin "$@" 

8) Копирование understandскрипта и добавление строки echo "\$LD_LIBRARY_PATH after === $LD_LIBRARY_PATH"показало, что он был установлен на:

$LD_LIBRARY_PATH after === /home/me/bin/scitools/bin/linux64 

9) Очевидно, что библиотеки, которые выдают ошибку, ищут библиотеку Qt v5.10 Core. Но мы находим библиотеку Qt v5.6 Core, которая была поставлена ​​с Understand.

Поэтому я добавил символическую ссылку в каталог понимаю с помощью:

[me@box1 ~]# ln -sf /usr/lib/libQt5Core.so.5.10.1 /home/me/bin/scitools/bin/linux64/libQt5Core.so.5.10 

Но это ничего не изменило.

Затем я приступил к изменению копии скрипта Bash «понимаю» ( understand-test) и изменил строку export LD_LIBRARY_PATH=$scriptdirна export LD_LIBRARY_PATH=$scriptdir:/usr/lib. Но это также ничего не изменило.

В то время /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 (v5.6) используется, что я могу сделать, чтобы сделать библиотеки, такие как /usr/lib/libKF5KIOWidgets.so.5, /usr/lib/libKF5KIOCore.so.5и т.д. найти и использовать v5.10.1 /usr/lib/libQt5Core.so.5.10.1 ?

0
Почему бы просто не удалить 5,6 библиотеки? Ignacio Vazquez-Abrams 5 лет назад 0
@ IgnacioVazquez-Abrams Потому что это не моя копия Understand. Компания, с которой я в настоящее время заключаю контракты, позволяет мне дистанционно работать и устанавливать его на свой рабочий стол на время действия контракта. Мне не разрешено вносить изменения. Копирование сценария Bash и внесение в него изменений, я полагаю, уже является серой областью. Rob Waa 5 лет назад 0
Клавиши ввода Enter здесь, по-видимому. Ваш комментарий подстегнул меня внести дальнейшие изменения в скопированный скрипт Bash. Я изменил строку `export LD_LIBRARY_PATH = $ scriptdir` в` export LD_LIBRARY_PATH = / usr / lib`. И это помогло. Understand теперь работает на QT 5.10.1, и все ссылки открываются и работают. Я жду одобрения, чтобы внести изменения. Спасибо за ваше предложение. :) Rob Waa 5 лет назад 0
`/ usr / lib` уже находится в пути поиска загрузчика, поэтому вы сможете полностью удалить переменную. Ignacio Vazquez-Abrams 5 лет назад 0
Вы снова правы. Только что проверил. Я обновил письмо с моим запросом. Это я закомментирую эту конкретную строку. Спасибо! Являются ли библиотеки Qt обратно совместимыми по умолчанию, и причина, по которой `readelf` показывает более старые версии? Rob Waa 5 лет назад 0
Обычно это работает так, что младшие версии библиотек должны быть обратно совместимыми, а основные версии могут нарушать API. Ignacio Vazquez-Abrams 5 лет назад 0
Хорошо, спасибо за разъяснение. Я также только что получил отклик от компании. Так что я в порядке. Спасибо за вашу помощь. Как пометить ваш комментарий как принятый ответ? Rob Waa 5 лет назад 0
Вы не делаете; позвольте мне написать что-нибудь ... Ignacio Vazquez-Abrams 5 лет назад 0

1 ответ на вопрос

0
Ignacio Vazquez-Abrams

Как правило, библиотеки имеют обратную совместимость с другими версиями, поэтому вы можете использовать систему Qt5 вместо поставляемой. Вы можете сделать это, удалив библиотечные файлы 5.6, или, если это единственные библиотечные файлы импорта в этом каталоге, вы можете $LD_LIBRARY_PATHполностью их пропустить .