ฉันจะทำให้ libQtCore v5.10.1 ของ distro พร้อมใช้งานได้อย่างไรเมื่อมีการใช้งาน v5.6 ที่จัดส่งของแอปพลิเคชัน


0

1) เมื่อฉันเริ่มเข้าใจจากบรรทัดคำสั่งฉันเห็นดังต่อไปนี้ ทั้งหมดก็โอเค :

[me@box1 ~]# understand

2) ภายใต้หัวข้อ "เริ่มต้นใช้งาน" บนแท็บ "เริ่มต้นใช้งาน":

เมื่อฉันคลิกที่ลิงก์ใด ๆ "เข้าใจวิธีใช้ ... ", "ทำความเข้าใจกับคำถามที่พบบ่อย ... ", "ทำความเข้าใจกับ API API ของ Perl ... ", "เข้าใจวิธีใช้ 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 ถูกติดตั้งโดย distro ของฉัน (Arch Linux):

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

4) readelf แจ้งให้ฉันทราบ (และยืนยัน qmake เอาต์พุตของ) ที่ distro ของฉันติดตั้ง 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 แจ้งให้ฉันทราบว่าเข้าใจจัดส่งด้วย 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 ที่มาพร้อมกับทำความเข้าใจ

ดังนั้นฉันจึงเพิ่ม symlink ในไดเรกทอรีเข้าใจด้วย:

[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 ?


ทำไมไม่ลองลบ 5.6 libs ออก?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams เพราะมันไม่ใช่สำเนาของความเข้าใจของฉัน บริษัท ที่ฉันทำสัญญาอยู่ในขณะนี้อนุญาตให้ฉันสื่อสารโทรคมนาคมและติดตั้งบนเดสก์ท็อปของฉันเองตลอดระยะเวลาของสัญญา ฉันไม่ได้รับอนุญาตให้ทำการเปลี่ยนแปลง การคัดลอกสคริปต์ Bash และทำการเปลี่ยนแปลงเป็นพื้นที่สีเทาที่ฉันเดาอยู่แล้ว
Rob Waa

เห็นได้ชัดว่าข้อความ Enter-key ที่นี่ ความคิดเห็นของคุณทำให้ฉันต้องเปลี่ยนแปลงสคริปต์ 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

คำตอบ:


0

โดยทั่วไปแล้วไลบรารีสามารถทำงานร่วมกันได้ในเวอร์ชันรองดังนั้นคุณควรใช้ระบบ Qt5 แทนการจัดหา คุณสามารถทำได้โดยการลบไฟล์ไลบรารี 5.6 หรือถ้าไฟล์เหล่านั้นเป็นไฟล์ไลบรารีเดียวของการนำเข้าในไดเรกทอรีนั้นคุณสามารถละเว้น $LD_LIBRARY_PATH อย่างสิ้นเชิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.