“ ไม่สามารถโหลดปลั๊กอินแพลตฟอร์ม” xcb“” ในขณะที่เปิดแอป qt5 บน linux โดยไม่ต้องติดตั้ง qt


22

ฉันเขียนแอปพลิเคชันสำหรับ linux ซึ่งใช้ Qt5

แต่เมื่อฉันพยายามที่จะเปิดมันบน linux โดยไม่ต้องติดตั้ง Qt SDK ผลลัพธ์ในคอนโซลคือ:

Failed to load platform plugin "xcb". Available platforms are:

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร บางทีฉันต้องคัดลอกไฟล์ปลั๊กอิน? เมื่อฉันใช้ Ubuntu ที่ติดตั้ง Qt5 แต่ฉันเปลี่ยนชื่อไดเรกทอรี Qt เกิดปัญหาเดียวกัน ดังนั้นจึงใช้ไฟล์บางส่วนจากไดเรกทอรี qt ...

ฉันพบไฟล์libqxcb.soในไดเรกทอรี Qt SDK แล้ว แต่การวางไว้ใน/usr/libนั้นไม่ได้ช่วยอะไร

คำตอบ:


12

โซลูชันที่ถูกต้องกำลังเรียกใช้ comand ต่อไปนี้บนเทอร์มินัล:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

มันสร้างลิงก์สัญลักษณ์ที่พลาดไป


1
วิธีนี้ช่วยแก้ไขปัญหาให้ฉันได้
Pratik Singhal

3
ทำไมคุณเชื่อมโยงไฟล์ในplugins/platformsการ/usr/bin? platformsไดเรกทอรีมีห้องสมุดที่ใช้ร่วมกัน/usr/binจะใช้สำหรับไฟล์ไบนารี ไม่ควรเนื้อหาของplatformsเข้าไป/usr/lib?
นาธานเอฟ

@NathanF อย่างน้อยสำหรับการติดตั้งตัวโหลด Qt ค้นหาแพลตฟอร์มที่/usr/bin/platforms(ฉันไม่รู้ว่าทำไม) ดังนั้นคำตอบนี้ใช้ได้สำหรับฉัน: stackoverflow.com/a/25437758/2249798
m13r

12

สำหรับผู้อ่านในอนาคตที่เจอเรื่องนี้ - ก่อนที่คุณจะเริ่ม (อันตราย) ยุ่งกับ symlinks ไปยัง shared library ฉันขอแนะนำให้คุณรัน

export QT_DEBUG_PLUGINS=1

จากนั้นเรียกใช้ความล้มเหลวในการปฏิบัติการของคุณอีกครั้งใน Terminal อ่านข้อความแสดงข้อผิดพลาดที่เกิดขึ้นจริงโดย QT เนื่องจากไม่มีวิธีแก้ไขปัญหาข้างต้นที่ระบุสาเหตุของข้อผิดพลาดนี้ในกรณีของฉัน

เอาต์พุตของฉันหลังจากเปิดเครื่องQT_DEBUG_PLUGINSคือ:

QFactoryLoader::QFactoryLoader() checking directory path "/opt/PostgreSQL/9.6/pgAdmin 4/bin/platforms" ...
loaded library "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so" : "Cannot load library /opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so: (/opt/PostgreSQL/9.6/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))"
This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

ดังนั้นฉันจึง googled version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))ข้อผิดพลาดและพบวิธีแก้ปัญหาซึ่งแก้ไขปัญหา


2
ไม่แน่ใจว่าใครลงคะแนนคุณ สิ่งนี้ทำให้ฉันมีร่องรอยที่จำเป็นในการค้นหาข้อผิดพลาดจริงที่เกี่ยวข้องกับสถานการณ์เฉพาะของฉัน (ในกรณีของฉัน libc ++ ดังนั้นจึงหายไปและต้องติดตั้งจาก libc ++ - dev "ขอบคุณสำหรับการโพสต์นี้
HBSKan

11

ฉันมีข้อความแสดงข้อผิดพลาดนี้เมื่อพยายามเรียกใช้ "Stellarium"

ด้วย strace libxcb-xinerama.so.0ฉันพบว่าไฟล์ที่ขาดหายไปคือ ฉันต้องติดตั้งใหม่libxcb-xinerama0เพื่อให้ใช้งานได้:

sudo apt-get install --reinstall libxcb-xinerama0

ว้าวสิ่งที่ยุ่งเหยิงในการล่าสัตว์นี้คือการลองติดตั้งใหม่หลายครั้ง ขอบคุณมากสำหรับสิ่งนี้
Hendy

สิ่งนี้ช่วย !!! ขอบคุณ
trsvchn

6

ลองติดตั้งlibqt5x11extras5แพ็คเกจด้วยคำสั่ง:
sudo apt-get install libqt5x11extras5

ชื่ออาจแตกต่างกัน คุณสามารถค้นหาโดยการค้นหา:
sudo apt-cache search qt5 | grep 'X11 extras'

และคุณได้รับชื่อของแพคเกจเป็นผล:

libqt5x11extras5 - ความพิเศษ Qt 5 X11


3

รัน ldd บนแอปพลิเคชันของคุณเพื่อดูว่าจะแก้ไขการขึ้นต่อกันของไลบรารีได้อย่างไร

นอกจากนี้ยังเป็นสิ่งที่ต้องอ่านเพื่อทำความเข้าใจว่าจำเป็นต้องใช้ไลบรารีใดในกรณีที่ใช้งานง่ายของ gui:

http://qt-project.org/doc/qt-5/linux-deployment.html


2

ในประเภทอูบุนตูของฉัน:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/platforms

สามารถทำงานได้


1
นี่ไม่ใช่คำตอบที่ดีอย่างที่มันเป็น โปรดแก้ไขเพื่ออธิบายสิ่งที่คำสั่งนั้นทำ
You'reAGitForNotUsingGit

ไม่ได้ผลสำหรับฉัน
Ratbert

2

สำหรับผู้ที่ยังคงติดอยู่หลังจากลองใช้ตัวเลือกอื่น ๆ ทั้งหมดในอินเทอร์เน็ตคุณสามารถค้นหาเส้นทางที่ถูกต้องซึ่งมีการค้นหาชื่อฉาวโฉ่ libqxcb.soนี้เพื่อเปิด / โหลดโดยQtแอป ( VirtualBox-5.2.8เป็นQtแอปในกรณีของฉัน) โดยใช้เครื่องมือstrace ในกรณีของฉันเนื่องจากฉันกำลังสร้างVirtualBox-5.2.8จากแหล่งที่มามันกำลังค้นหาlibqxcb.soในตำแหน่งด้านล่าง:
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/" และไม่ได้อยู่ในdefaultเส้นทางไลบรารีเส้นทางQtการติดตั้ง ฯลฯ ดังนั้นจึงไม่มีการlddตรวจสอบและโซลูชันอื่น ๆ ที่ใช้งานได้ และการตั้งค่าQT_DEBUG_PLUGINS=1ก็ไม่ได้สร้างบันทึกเพิ่มเติมเช่นกัน

ใช้ strace บนไบนารี VirtualBox ที่ฉันสร้างโดยใช้ Clang / LLVM บน Ubuntu 17.10 x86_64:

...VirtualBox-5.2.8$ strace ./out/linux.amd64/release/bin/VirtualBox

.
.
.
access(".../VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: )              = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Reinstalling the application may fix this problem.) = 154
.
.
.

นั่นคือของฉันhitting-the-nail-on-its-headขณะและฉันสร้างsymlinkจากการติดตั้งQt5.10.1's platformsไดเรกทอรีกล่าวถึงด้านล่าง เข้าสู่การสืบค้นเส้นทางซึ่งเป็น"...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/" "...VirtualBox-5.2.8/out/linux.amd64/release/bin/"ดังนั้นVirtualBox-5.2.8สร้างขึ้นจากแหล่งที่มาบน Linux ( Ubuntu 17.10 x86_64) โดยใช้เปิดตัวClang/LLVMในที่สุดก็ประสบความสำเร็จ !

ในความเป็นจริงอีกสิ่งที่น่าสนใจที่นี่คือที่ผมได้สร้างVirtualBox-5.2.8ทั้งหมดใช้Clang/Clang++/LLVMในUbuntu 17.10 x86_64หลังจากความพยายามอย่างมาก - สำหรับFreeBSDมีอยู่แล้วพอร์ตสำหรับการสร้างVirtualBoxโดยใช้clangแต่สำหรับลินุกซ์ก็หนักขึ้นอยู่กับGCCที่ฉันเห็นและด้วยเหตุนี้มันต้องใช้เวลามากของความพยายามที่จะได้รับ ถึงจุดนี้เพื่อให้สามารถสร้างได้สำเร็จVirtualBox-5.2.8จากแหล่งที่มาของการใช้Clang/Clang++/LLVMบนUbuntu 17.10 x86_64สำหรับเป้าหมายLinux/AMD64( Ubuntu 17.10 x86_64) และประสบความสำเร็จในการเปิดตัวหลังจากการแก้ไขปัญหาอื่น ๆ พร้อมกับที่มีชื่อเสียงlibqxcb.soนี้

ไชโย


1

นี่คือวิธีแก้ปัญหาบางอย่างเมื่อฉันใช้โปรแกรมจำลองบน Ubuntu 18.04

$ vim ~ / .bashrc

เพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์ ฉันติดตั้ง Android SDK ของฉันที่/opt/Android/Sdk

export ANDROID_HOME=/opt/Android/Sdk
export ANDROID_SDK_ROOT=/opt/Android/Sdk
export ANDROID_AVD_HOME=/home/<your name>/.android/avd
export LD_LIBRARY_PATH="/opt/Android/Sdk/emulator/lib64:$LD_LIBRARY_PATH"
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins

1

การใช้งานนี้แก้ไขได้สำหรับฉัน:

sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0

0

ดูเหมือนจะมีหลายสิ่งหลายอย่างที่ขาดหายไปหลัง ในกรณีของฉัน (Debian 9.7), QT_DEBUG_PLUGINS = 1 ช่วยติดตามไลบรารีที่หายไปกลับมาและ

$ sudo apt-get install libxcb-render-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4

แก้ไขปัญหา



-3

คัดลอกplugins/platforms/libqxcb.soจากการqtติดตั้งของคุณไปยังplatforms/libqxcb.soไดเรกทอรีแอปพลิเคชันของคุณ

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