【发布时间】:2021-11-22 23:35:50
【问题描述】:
我正在尝试为 arm64 Pi4 编译 Qt 5.15.2。 配置阶段失败
ERROR: Feature 'opengles2' was enabled, but the pre-condition '(config.win32 && !features.opengl-dynamic) || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.
ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && !config.wasm && features.egl' failed.
ERROR: The OpenGL functionality tests failed!
阅读构建输出后,我看到 OpenGL 测试如何失败:
+ cd /build/pi4/parts/qtbase/build/config.tests/opengl_es2 && PKG_CONFIG_SYSROOT_DIR=/ PKG_CONFIG_LIBDIR=/build/pi4/stage/usr/lib/pkgconfig:/build/pi4/stage/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig /build/pi4/parts/qtbase/build/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" 'QMAKE_LIBDIR += /build/pi4/stage/usr/lib/aarch64-linux-gnu' -early "CONFIG += cross_compile" 'QMAKE_USE += opengl_es2' 'QMAKE_LIBS_OPENGL_ES2 = -L//build/pi4/stage/usr/lib -lGLESv2' 'QMAKE_INCDIR_OPENGL_ES2 = //build/pi4/stage/usr/include' /build/pi4/parts/qtbase/build/config.tests/opengl_es2
+ cd /build/pi4/parts/qtbase/build/config.tests/opengl_es2 && MAKEFLAGS= /usr/bin/make
> /usr/bin/aarch64-linux-gnu-g++ -c -march=armv8-a -mtune=cortex-a72 -O2 -w -fPIC -I. -I/build/pi4/stage/usr/include -I/build/pi4/parts/qtbase/build/mkspecs/devices/linux-rasp-pi4-v3d-g++ -o main.o main.cpp
> /usr/bin/aarch64-linux-gnu-g++ -Wl,-O1 -o opengl_es2 main.o -L/build/pi4/stage/usr/lib/aarch64-linux-gnu -L//build/pi4/stage/usr/lib -lGLESv2
> /usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: warning: libglapi.so.0, needed by //build/pi4/stage/usr/lib/libGLESv2.so, not found (try using -rpath or -rpath-link)
> /usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: //build/pi4/stage/usr/lib/libGLESv2.so: undefined reference to `_glapi_tls_Dispatch'
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:69: opengl_es2] Error 1
但是libglapi.so.0 正好在-L//build/pi4/stage/usr/lib 中。
我手动执行了测试步骤,但失败并出现同样的错误:
root@10cb734e2e05:~/pi4/parts/qtbase/build/config.tests/opengl_es2# /usr/bin/aarch64-linux-gnu-g++ -Wl,-O1 -o opengl_es2 main.o -L/build/pi4/stage/usr/lib/aarch64-linux-gnu -L//build/pi4/stage/usr/lib -lGLESv2
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: warning: libglapi.so.0, needed by //build/pi4/stage/usr/lib/libGLESv2.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: //build/pi4/stage/usr/lib/libGLESv2.so: undefined reference to `_glapi_tls_Dispatch'
collect2: error: ld returned 1 exit status
但是如果我指定/build/pi4/stage/usr/lib和-rpath相同的路径,编译成功:
root@10cb734e2e05:~/pi4/parts/qtbase/build/config.tests/opengl_es2# /usr/bin/aarch64-linux-gnu-g++ -Wl,-O1,-rpath=/build/pi4/stage/usr/lib -o opengl_es2 main.o -L/build/pi4/stage/usr/lib/aarch64-linux-gnu -L//build/pi4/stage/usr/lib -lGLESv2
所以我的问题是 - 为什么链接器无法使用 -L 参数找到相同的库,但如果我使用 -rpath 则可以找到?
【问题讨论】:
标签: linux qt gcc cross-compiling arm64