Các ứng dụng Qt không hoạt động do libEGL


10

Tôi đang phát triển một số ứng dụng GUI (đơn giản) cho RPi2 trong Qt5. Quá trình thiết lập: Việc phát triển mã được thực hiện trên máy tính xách tay Windows bằng Netbeans + Qt Designer và được xây dựng từ xa trên RPi chạy Raspbian Jessie với các công cụ đi kèm (g ++ 4.9.2, Qt 5.3.2, gói qt5 mặc định), như mô tả ở đây . Thiết lập này hoạt động tốt.

Tuy nhiên, ngay cả một ví dụ tối thiểu không hoạt động, mặc dù xây dựng ok. Nó không khởi động được và libEGL warning: DRI2: failed to authenticatexuất hiện nếu ứng dụng đã được khởi động từ thiết bị đầu cuối.

Qt không thể chạy trên RPi? Nếu không xin vui lòng giúp tôi giải quyết vấn đề này.

EDIT1: Đây là những gì tôi có sau khi thực hiện findlệnh như Alexey Vesnin đã đề xuất:

/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: Danh sách với thông tin bổ sung:

-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)

Bạn đang cố gắng chạy ứng dụng từ xa?
goldilocks

không, tôi chạy nó từ RPi
Andrey Pro

@goldilocks trong trường hợp điều khiển từ xa chạy một thông báo lỗi sẽ khác
Alexey Vesnin

Câu trả lời:


7

Đó là một vấn đề linux và Unix thông thường, không có gì liên quan đến Pi. Đây là vấn đề: libs của bạn cần phải được liên kết. Làm sudo -svà trở thành một gốc cho một hoạt động như vậy. Và hãy khắc phục sự cố!

Đầu tiên, tìm chúng, như thế này:

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

và thực hiện liên kết này đến các đường dẫn đầy đủ đến các tệp như thế này:

# 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

và cho HĐH biết những gì bạn đã làm và đưa nó vào tài khoản như thế này:

# ldconfig

Phần /path/to/libbạn nên thay thế bằng đường dẫn đầy đủ mà findcác lệnh sẽ hiển thị cho bạn. Và nếu chạy từ người dùng không có đặc quyền - hãy đảm bảo rằng nó nằm trong videonhóm - đôi khi phần cài đặt quyền cũ này sẽ nổi lên. Làm thế nào để kiểm tra:

# getent group video | cut -d: -f3

nếu nó không có gì - thì không phải vậy, nhưng nếu nó cho một số, thì hãy nhập tên người dùng của bạn vào groupslệnh - một ví dụ cho người dùng pi:

# groups pi

nếu nó không hiển thị videonhóm - hãy thêm nó dưới dạng nhóm bổ sung , không phải là nhóm chính, như thế này:

# usermod -a -G video pi

điều này sẽ thêm người dùng pivào nhóm videomà không phá vỡ mọi thứ

CẬP NHẬT: lệnh kiểm tra bổ sung để tìm hiểu các tập tin được tìm thấy là gì:

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

CẬP NHẬT # 2: Cố gắng làm điều này từ root:

# 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

CẬP NHẬT # 3: xây dựng Qt5 với các lỗi từ nguồn.

  • vào đây , cài đặt các phụ thuộc thông qua apt-get (các gói -dev)
  • làm gốc apt-get build-dep qt5-default
  • làm root 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, sau đóapt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev

sau đó làm điều này:

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

sau đó liên kết ./configure --helpđầu ra cho trường hợp của bạn và chúng tôi sẽ tiếp tục

CẬP NHẬT CUỐI CÙNG: xây dựng nguồn đã thực hiện thủ thuật, vấn đề là với một Qt lỗi thời trong các gói. Chuỗi cấu hình:

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

Quá trình xây dựng Raspberry Pi mất khoảng 40 giờ và 6 + Gb dung lượng lưu trữ. Đã sửa lỗi


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Steve Robillard

1
chính xác hơn là khoảng 46 giờ
Andrey Pro

nhưng chiến thắng là của chúng ta, cuối cùng!
Alexey Vesnin

1
Tôi muốn nâng cấp điều này - nhưng sau 2 năm, không có lý do gì để các nhà bảo trì gói vẫn chưa khắc phục điều này :(
UKMonkey

@UKMonkey không chỉ là vấn đề này đã buộc tôi phải tạo một bản phân phối Linux theo sở thích của riêng tôi - vấn đề vẫn tăng lên gấp bội :(
Alexey Vesnin

0

Trong trường hợp của tôi, điều này đã khắc phục vấn đề

sudo ln -s /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/arm-linux-gnueabihf/libGLESv2.so
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.