libEGL로 인해 Qt 응용 프로그램이 작동하지 않습니다


10

Qt5에서 RPi2 용 (간단한) GUI 응용 프로그램을 개발 중입니다. 설정 : 코드 개발은 Netbeans + Qt Designer를 사용하여 Windows 랩톱에서 수행되며 Raspbian Jessie를 실행하는 RPi에서 원격으로 빌드됩니다 (g ++ 4.9.2, Qt 5.3.2, 패키지 qt5-default). 여기에 설명되어 있습니다 . 이 설정은 일반적으로 잘 작동합니다.

그러나 최소한의 예제 조차도 작동하지 않지만 제대로 빌드됩니다. 시작에 실패 libEGL warning: DRI2: failed to authenticate하고 응용 프로그램이 터미널에서 시작된 경우 나타납니다.

RPi에서 Qt를 실행할 수 없습니까? 그렇지 않으면이 문제를 해결하도록 도와주세요.

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

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와 관련이 없습니다. 문제는 다음과 같습니다. 라이브러리를 심볼릭 링크해야합니다. 수행 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

그리고 OS에게 당신이 한 일을 알리고 다음과 같이 고려하십시오.

# ldconfig

/path/to/lib부분은 그 전체 경로으로 대체해야하는 find명령을 보여줍니다. 권한이없는 사용자로부터 실행하는 경우 video그룹 에 속해 있는지 확인하십시오. 때로는 권한 설정의이 오래된 부분이 뜨는 경우도 있습니다. 확인 방법 :

# getent group video | cut -d: -f3

그것이 아무것도주지 않는다면-그것은 사실이 아니지만 숫자를 주면 groups명령에 사용자 이름을 입력하십시오 -사용자의 예 pi:

# groups pi

video그룹이 표시 되지 않으면 다음과 같이 기본 그룹 이 아닌 보조 그룹으로 추가하십시오 .

# usermod -a -G video pi

이것은 일을 끊지 않고 pi그룹 에 사용자 를 추가 video합니다.

업데이트 : 발견 된 파일을 찾기위한 추가 검사 명령 :

# 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 빌드에는 약 40 시간과 6 + Gb의 저장 공간이 필요했습니다. 문제 해결


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Steve Robillard

1
보다 정확
Andrey Pro

그러나 승리는 우리의 것입니다!
Alexey Vesnin

1
나는 이것을지지하고 싶지만 2 년이 지난 후에도 패키지 관리자가 여전히 이것을
고치지

@UKMonkey는이 문제가 아니라 내 자신의 취향의 리눅스 배포판을 만들도록 강요했습니다-문제는 여전히 증가합니다 :(
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.