由于libEGL,Qt应用程序无法正常工作


10

我正在Qt5中为RPi2开发一些(简单的)GUI应用程序。设置:代码开发是在Windows笔记本电脑上使用Netbeans + Qt Designer进行的,并使用附带的工具(g ++ 4.9.2,Qt 5.3.2,软件包qt5-default)在运行Raspbian Jessie的RPi上远程构建。这里描述。这种设置通常可以正常工作。

但是,即使构建得很好,即使是最小的示例也行不通。它无法启动,libEGL warning: DRI2: failed to authenticate如果已从终端启动了应用程序,则会出现。

Qt不能在RPi上运行吗?否则请帮助我解决此问题。

EDIT1:在执行findAlexey 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

编辑3:

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

Answers:


7

这是一个常见的linux和Unix问题,与Pi无关。这是问题所在:您的库需要链接。做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

如果未显示videogroup-将其添加为补充组,而不是主要,如下所示:

# usermod -a -G video pi

这会将用户添加pi到组中,video而不会造成麻烦

更新:附加检查命令以找出找到了哪些文件:

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

UPDATE#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

UPDATE#3:使用源代码中的错误修复程序构建Qt5。

  • 转到这里,通过apt-get(-dev软件包)安装依赖项
  • 作为根 apt-get build-dep qt5-default
  • 作为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,之后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构建大约花费了40个小时,并且存储空间超过6 Gb。问题已解决


评论不作进一步讨论;此对话已转移至聊天
史蒂夫·罗比拉德

1
大约需要46小时才能更精确
Andrey Pro

但最终胜利是我们的!
阿列克谢·韦斯宁

1
我想对此表示赞同-但是2年后,软件包维护人员没有任何借口仍未解决此问题:(
UKMonkey

@UKMonkey不仅仅是这个问题迫使我制作自己风格的Linux发行版-问题仍然成倍增加:(
Alexey Vesnin

0

就我而言,这解决了问题

sudo ln -s /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/arm-linux-gnueabihf/libGLESv2.so
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.