为arm64架构树莓派4编译Qt 5.15.2时无法链接交叉编译的opengl_es2
树莓派ARM64架构编译Qt 5.15.2 OpenGL链接问题说明
核心原因
该问题由链接器对不同类型依赖的搜索路径规则差异导致:
-L参数仅用于搜索编译命令中通过-l显式指定的直接依赖库,你此处显式声明的依赖只有-lGLESv2,因此链接器只会用-L路径查找libGLESv2.so,不会用它查找libGLESv2.so自身依赖的libglapi.so.0这类间接依赖库。- 链接器搜索间接依赖的优先级为:
-rpath-link指定路径 >-rpath指定路径 > 交叉编译目标架构的默认系统路径。 - 你的
libglapi.so.0存放在自定义的stage编译目录,不属于交叉编译的默认系统搜索路径,因此默认链接时找不到该库。添加-rpath参数后,该路径被链接器纳入间接依赖搜索范围,因此可以正常完成链接。
注意:
-rpath的设计目的是写入二进制文件作为运行时库搜索路径,你当前传入的是编译环境的stage目录路径,该路径在烧录到树莓派实际运行时不存在,因此更规范的做法是编译阶段使用-rpath-link指定编译时间接依赖搜索路径,避免运行时报错。
Qt编译修复方案
执行configure命令时添加对应链接参数即可解决该问题:
./configure \ # 保留你原有的所有configure参数不变 \ QMAKE_LFLAGS="-Wl,-rpath-link,/build/pi4/stage/usr/lib -Wl,-rpath-link,/build/pi4/stage/usr/lib/aarch64-linux-gnu"
如果存在其他系统库找不到的问题,建议同时配置交叉编译sysroot参数,同时修正pkg-config的sysroot配置:
export PKG_CONFIG_SYSROOT_DIR=/build/pi4/stage ./configure \ -sysroot /build/pi4/stage \ # 其余原有参数和上述QMAKE_LFLAGS参数
内容的提问来源于stack exchange,提问作者Renat
相关产品推荐
相关产品推荐

