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


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

[me@box1 ~]# understand

2) В разделе «Начало работы» в разделе «Начало работы» -tab:

когда я нажимаю на любую из ссылок «Понять справки ...», «Понять часто задаваемые вопросы ...», «Понять справочную информацию API Perl ...», «Понять справку API Python ...» и «Поддержка 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 сообщает мне, что «Понимать» будет использовать свою отгруженную версию 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 library. Но они ищут библиотеку 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
2018-05-09 10:29


Источник


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


Ответы:


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


0
2018-05-09 11:52