แอปพลิเคชัน Qt ไม่ทำงานเนื่องจาก libEGL


10

ฉันกำลังพัฒนาแอพพลิเคชั่น GUI (ง่าย) สำหรับ RPi2 ใน Qt5 การตั้งค่า: การพัฒนาโค้ดจะดำเนินการบนแล็ปท็อป Windows โดยใช้ Netbeans + Qt Designer และสร้างจากระยะไกลบน RPi ที่ใช้ Raspbian Jessie พร้อมเครื่องมือที่มาพร้อมกับมัน (g ++ 4.9.2, Qt 5.3.2, แพ็คเกจ qt5- ค่าเริ่มต้น) เช่นอธิบายไว้ที่นี่ การตั้งค่าทั่วไปใช้งานได้ดี

อย่างไรก็ตามแม้ตัวอย่างขั้นต่ำก็ไม่สามารถใช้งานได้แม้ว่าจะใช้ได้ดี มันล้มเหลวในการเริ่มต้นและlibEGL warning: DRI2: failed to authenticateปรากฏขึ้นหากแอปพลิเคชันเริ่มต้นจากเทอร์มินัล

Qt วิ่งบน RPi ไม่ได้เหรอ? มิฉะนั้นโปรดช่วยฉันแก้ไขปัญหานี้

แก้ไข 1: นี่คือสิ่งที่ฉันมีหลังจากทำfindคำสั่งเช่น Alexey Vesnin แนะนำ:

/usr/lib/arm-linux-gnueabihf/libEGL.so
/usr/lib/arm-linux-gnueabihf/libEGL.so.1
/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
/usr/lib/chromium-browser/libs/libEGL.so
/usr/lib/chromium-browser/libs/libEGL.so.TOC
/opt/vc/lib/libEGL.so
/opt/vc/lib/libEGL_static.a


/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
/usr/lib/arm-linux-gnueabihf/libGLESv2.so
/usr/lib/chromium-browser/libs/libGLESv2.so
/usr/lib/chromium-browser/libs/libGLESv2.so.TOC
/opt/vc/lib/libGLESv2_static.a
/opt/vc/lib/libGLESv2.so

EDIT2: รายการที่มีข้อมูลเพิ่มเติม:

-rw-r--r-- 1 pi pi 171312 Nov 11 14:20 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
-rwxr-xr-x 1 root root 107880 Nov  2 22:27 /usr/lib/chromium-browser/libs/libEGL.so
-rw-r--r-- 1 root root 14189 Nov  2 22:27 /usr/lib/chromium-browser/libs/libEGL.so.TOC
-rw-r--r-- 1 root root 202072 Dec 19 21:01 /opt/vc/lib/libEGL.so
-rw-r--r-- 1 root root 245356 Dec 19 21:19 /opt/vc/lib/libEGL_static.a



-rw-r--r-- 1 pi pi 29996 Jan 12  2016 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
-rwxr-xr-x 1 root root 2632816 Nov  2 22:27 /usr/lib/chromium-browser/libs/libGLESv2.so
-rw-r--r-- 1 root root 29617 Nov  2 22:27 /usr/lib/chromium-browser/libs/libGLESv2.so.TOC
-rw-r--r-- 1 root root 100008 Dec 19 21:19 /opt/vc/lib/libGLESv2_static.a
-rw-r--r-- 1 root root 105768 Nov 25 17:35 /opt/vc/lib/libGLESv2.so

edit3:

linux-vdso.so.1 (0x7ecef000)
    /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f53000)
    libQt5Widgets.so.5 => /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5 (0x76a25000)
    libQt5Gui.so.5 => /usr/lib/arm-linux-gnueabihf/libQt5Gui.so.5 (0x76655000)
    libQt5Core.so.5 => /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5 (0x761d0000)
    libGLESv2.so => /opt/vc/lib/libGLESv2.so (0x761ab000)
    libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76183000)
    libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x760a6000)
    libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x7602b000)
    libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x75ffe000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x75ebd000)
    libgobject-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0 (0x75e63000)
    libglib-2.0.so.0 => /lib/arm-linux-gnueabihf/libglib-2.0.so.0 (0x75d5f000)
    libX11.so.6 => /usr/lib/arm-linux-gnueabihf/libX11.so.6 (0x75c49000)
    libGLESv2.so.2 => /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 (0x75c31000)
    /lib/ld-linux-armhf.so.3 (0x54b67000)
    libpng12.so.0 => /lib/arm-linux-gnueabihf/libpng12.so.0 (0x75c01000)
    libharfbuzz.so.0 => /usr/lib/arm-linux-gnueabihf/libharfbuzz.so.0 (0x75ba5000)
    libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0x75b7d000)
    libicui18n.so.52 => /usr/lib/arm-linux-gnueabihf/libicui18n.so.52 (0x759bd000)
    libicuuc.so.52 => /usr/lib/arm-linux-gnueabihf/libicuuc.so.52 (0x75874000)
    libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x75861000)
    librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x7584a000)
    libEGL.so => /opt/vc/lib/libEGL.so (0x75810000)
    libbcm_host.so => /opt/vc/lib/libbcm_host.so (0x757ea000)
    libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0x757d4000)
    libvcos.so => /opt/vc/lib/libvcos.so (0x757ba000)
    libffi.so.6 => /usr/lib/arm-linux-gnueabihf/libffi.so.6 (0x757aa000)
    libpcre.so.3 => /lib/arm-linux-gnueabihf/libpcre.so.3 (0x75736000)
    libxcb.so.1 => /usr/lib/arm-linux-gnueabihf/libxcb.so.1 (0x75717000)
    libdrm.so.2 => /usr/lib/arm-linux-gnueabihf/libdrm.so.2 (0x756fa000)
    libglapi.so.0 => /usr/lib/arm-linux-gnueabihf/libglapi.so.0 (0x756c1000)
    libfreetype.so.6 => /usr/lib/arm-linux-gnueabihf/libfreetype.so.6 (0x75629000)
    libgraphite2.so.3 => /usr/lib/arm-linux-gnueabihf/libgraphite2.so.3 (0x755fb000)
    libicudata.so.52 => /usr/lib/arm-linux-gnueabihf/libicudata.so.52 (0x73f7e000)
    libXau.so.6 => /usr/lib/arm-linux-gnueabihf/libXau.so.6 (0x73f73000)
    libXdmcp.so.6 => /usr/lib/arm-linux-gnueabihf/libXdmcp.so.6 (0x73f67000)

คุณพยายามเรียกใช้แอปพลิเคชันจากระยะไกลหรือไม่
goldilocks

ไม่ฉันวิ่งจาก RPi
Andrey Pro

@goldilocks ในกรณีที่ใช้งานจากระยะไกลข้อผิดพลาดจะแตกต่างกัน
Alexey Vesnin

คำตอบ:


7

เป็นปัญหาปกติของ linux และ Unix ไม่มีส่วนเกี่ยวข้องใด ๆ กับ Pi นี่คือปัญหา: libs ของคุณต้องเชื่อมโยงกัน ทำsudo -sและกลายเป็นรูทสำหรับการดำเนินการดังกล่าว และแก้ไขปัญหากันเถอะ!

ก่อนอื่นให้ค้นหาพวกเขาเช่นนี้

# find / -name libEGL* -type f
# find / -name libGLESv2* -type f

และทำการเชื่อมโยงไปยังพา ธแบบเต็มไปยังไฟล์เช่นนี้

# ln -fs /path/to/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so
# ln -fs /path/to/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1
# ln -fs /path/to/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
# ln -fs /path/to/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2

และให้ระบบปฏิบัติการทราบว่าคุณได้ทำอะไรไปแล้วพิจารณาเช่นนี้

# ldconfig

/path/to/libส่วนหนึ่งที่คุณควรเปลี่ยนเส้นทางเต็มรูปแบบที่findคำสั่งจะแสดงให้คุณ และหากเรียกใช้จากผู้ใช้ที่ไม่มีสิทธิพิเศษ - ตรวจสอบให้แน่ใจว่าอยู่ในvideoกลุ่ม - บางครั้งการตั้งค่าการอนุญาตแบบเก่านี้จะลอยขึ้นมา วิธีตรวจสอบ:

# getent group video | cut -d: -f3

ถ้าไม่มีอะไร - ไม่ใช่กรณีนั้น แต่ถ้าให้ตัวเลขให้พิมพ์ชื่อผู้ใช้ของคุณในgroupsคำสั่ง - ตัวอย่างสำหรับผู้ใช้pi:

# groups pi

ถ้ามันไม่แสดงvideoกลุ่ม - เพิ่มเป็นกลุ่มเสริมไม่ใช่กลุ่มหลักเช่นนี้:

# usermod -a -G video pi

สิ่งนี้จะเพิ่มผู้ใช้piไปยังกลุ่มvideoโดยไม่ต้องแยกแยะ

UPDATE: คำสั่งตรวจสอบเพิ่มเติมเพื่อค้นหาไฟล์ที่พบ:

# find / -name libEGL* -type f -exec ls -la {} \;
# find / -name libGLESv2* -type f -exec ls -la {} \;

อัปเดต # 2: ลองทำสิ่งนี้จากรูท:

# ln -fs /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so
# ln -fs /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
# ldconfig

ปรับปรุง # 3: สร้าง Qt5 ด้วยการแก้ไขข้อบกพร่องจากแหล่งที่มา

  • ไปที่นี่ติดตั้งการอ้างอิงผ่าน apt-get (แพ็คเกจ -dev)
  • ตามที่รูททำ apt-get build-dep qt5-default
  • อย่างที่รูททำapt-get install libxcb-xinerama0-dev flex bison gperf libicu-dev libxslt-dev ruby libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdbus-1-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-devหลังจากนั้นapt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev

หลังจากนั้นทำสิ่งนี้:

 # git clone https://code.qt.io/qt/qt5.git
 # cd qt5
 # git submodule update --init

หลังจากลิงก์./configure --helpออกสำหรับกรณีของคุณแล้วเราจะดำเนินการต่อ

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

 # mkdir qt-build
 # cd qt-build
 # ../configure -opensource -static -confirm-license -release -nomake examples -openssl-runtime -prefix /usr

Raspberry Pi build ใช้เวลาประมาณ 40 ชั่วโมงและ 6 + Gb ของพื้นที่จัดเก็บ แก้ไขปัญหาแล้ว


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Steve Robillard

1
ประมาณ 46 ชั่วโมงเพื่อความแม่นยำมากขึ้น
Andrey Pro

แต่ชัยชนะคือของเราในที่สุด!
Alexey Vesnin

1
ฉันต้องการ upvote นี้ - แต่หลังจาก 2 ปีไม่มีข้อแก้ตัวสำหรับผู้ดูแลบรรจุภัณฑ์ที่ยังไม่แก้ไข :(
UKMonkey

@UKMonkey ไม่เพียง แต่เรื่องนี้ทำให้ฉันต้องสร้างลินุกซ์ distro ของฉันเอง - ปัญหายังคงทวีคูณ :(
Alexey Vesnin

0

ในกรณีของฉันนี้แก้ไขปัญหาได้

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