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
?
export LD_LIBRARY_PATH=$scriptdir
เข้าไป export LD_LIBRARY_PATH=/usr/lib
. และนั่นก็เป็นกลอุบาย เข้าใจตอนนี้ทำงานบน QT 5.10.1 และลิงก์ทั้งหมดเปิดขึ้นและทำงาน ฉันรอการอนุมัติในขณะนี้เพื่อทำการเปลี่ยนแปลง ขอบคุณสำหรับคำแนะนำของคุณ :)
/usr/lib
อยู่ในเส้นทางการค้นหาโหลดเดอร์แล้วดังนั้นคุณควรจะสามารถลบตัวแปรได้อย่างสมบูรณ์
readelf
แสดงรุ่นเก่ากว่านี้ไหม?