树莓派4交叉编译Qt 6过程中出现OpenGL错误的问题求助
树莓派4交叉编译Qt6 OpenGL报错排查修复方案
核心问题说明
Qt6 默认采用 CMake 作为构建系统,你修改的 qmake.conf 属于 qmake 构建体系的配置,不会被 CMake 读取,这是 OpenGL 路径配置不生效的核心原因。
具体问题与修复步骤
- 配置体系不匹配
删除你自行新增的qtbase/mkspecs/linux-arm-gnueabihf-g++文件夹及相关修改,所有交叉编译配置统一通过 CMake 工具链文件传递。 - sysroot 软链接失效
你使用默认 rsync 参数同步的树莓派系统文件中,软链接仍为树莓派上的绝对路径,在宿主系统下会指向错误位置,导致找不到 OpenGL 库。重新执行同步命令:rsync -avzL pi@192.168.0.119:/lib $HOME/rpi-sdk/sysroot/ rsync -avzL pi@192.168.0.119:/usr $HOME/rpi-sdk/sysroot/-L参数会将软链接替换为实际文件,解决路径指向错误问题。 - toolchain.cmake 配置缺失
原工具链文件缺少 OpenGL 路径配置,且$HOME变量不会被 CMake 自动解析,修改后的完整toolchain.cmake如下(将/home/your_user替换为你实际的用户主目录绝对路径):set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(tools /home/your_user/rpi-sdk/toolchain-raspbian--x86_64-arm-linux-gnueabihf) set(CMAKE_SYSROOT /home/your_user/rpi-sdk/sysroot) set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++) # 新增架构适配参数,匹配树莓派4的armv8-a架构 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard") # 新增OpenGL ES2和EGL路径配置 set(OPENGL_ES2_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include) set(OPENGL_ES2_LIBRARY ${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf/libGLESv2.so) set(EGL_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/include) set(EGL_LIBRARY ${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf/libEGL.so) # 禁止CMake查找宿主系统的库和头文件 set(CMAKE_IGNORE_PATH /usr/include /usr/lib) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - configure 命令参数补全
修改交叉编译配置命令,新增强制开启GLES2的参数:qtbase/configure -release -opengl es2 -nomake examples -nomake tests -qt-host-path /home/your_user/QT_COMPILATION/qt-host -extprefix /home/your_user/QT_COMPILATION/qt-rpi -prefix /home/your_user/QT_COMPILATION/qt-rpi -- -DCMAKE_TOOLCHAIN_FILE=/home/your_user/rpi-sdk/toolchain.cmake -DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON -DQT_FEATURE_opengles2=ON
所有配置修改完成后,删除之前的构建目录残留文件,重新执行configure即可。
内容的提问来源于stack exchange,提问作者BikashRDas
相关产品推荐
相关产品推荐

