Como posso disponibilizar a libQtCore v5.10.1 da minha distro quando o v5.6 da aplicação está em uso?

0

1) Quando inicio o Understand na linha de comando, vejo o seguinte. Tudo está bem. :

[me@box1 ~]# understand

2) Abaixo do título "Primeiros passos", na guia "Primeiros passos":

quando clico em qualquer um dos links "Entenda a Ajuda ...", "Entenda a FAQ ...", "Entenda a Ajuda da API do Perl ...", "Entenda a Ajuda da API do Python ..." e "SciTools Apoio, suporte...", e também nos mesmos links do menu "Ajuda", então os seguintes erros são adicionados à janela do terminal e nada acontece:

[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 me informa que o Qt v5.10.1 está instalado pela minha distro (Arch Linux):

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

4) readelf me informa (e confirma a saída de qmake ) que minha distro instalou o 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 me informa que o Understand é enviado com o 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 me informa que o Understand usará sua versão enviada do 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) O script de bash understand que inicia understand.bin contém o seguinte:

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

8) Copiar o script understand e adicionar a linha echo "\$LD_LIBRARY_PATH after === $LD_LIBRARY_PATH" revelou que foi definido como:

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

9) Obviamente, as bibliotecas que lançam o erro estão procurando por uma biblioteca do Qt v5.10 Core. Mas estão encontrando a biblioteca Qt v5.6 Core que foi enviada com o Understand.

Então, adicionei um link simbólico ao diretório de compreensão com:

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

Mas isso não mudou nada.

Depois, mudei a cópia do script "entender" do Bash ( understand-test ) e alterei a linha export LD_LIBRARY_PATH=$scriptdir para export LD_LIBRARY_PATH=$scriptdir:/usr/lib . Mas isso também não mudou nada.

Enquanto /home/me/bin/scitools/bin/linux64/libQt5Core.so.5 (v5.6) está em uso, o que posso fazer para criar bibliotecas como /usr/lib/libKF5KIOWidgets.so.5 , /usr/lib/libKF5KIOCore.so.5 , etc encontra e usa v5.10.1 /usr/lib/libQt5Core.so.5.10.1 ?

    
por Rob Waa 09.05.2018 / 12:29

1 resposta

0

Geralmente, as bibliotecas são compatíveis com versões anteriores em versões menores, portanto, você deve poder usar o sistema Qt5 em vez do fornecido. Você pode fazer isso removendo os arquivos da biblioteca 5.6, ou se esses são os únicos arquivos de biblioteca de importação nesse diretório, então você pode omitir $LD_LIBRARY_PATH inteiramente.

    
por 09.05.2018 / 13:52