交叉编译Qt 5.7.1到树莓派3B时,ld无法找到-lGLESv2库报错
解决交叉编译Qt 5.7.1到树莓派3B时
ld: cannot find -lGLESv2的错误 我之前交叉编译Qt到树莓派3B的时候也碰到过一模一样的问题,这个错误本质是交叉编译链接器找不到树莓派的OpenGL ES 2.0库,大概率是你的sysroot环境里缺少对应库,或者Qt的configure没正确定位到库的路径。下面是我亲测有效的解决步骤:
1. 确认sysroot中是否存在GLESv2库
树莓派的OpenGL ES库默认放在/opt/vc/lib目录下,你先检查你的sysroot里有没有这个库:
ls /opt/qt5pi/sysroot/opt/vc/lib/libGLESv2.so
如果提示文件不存在,说明你的sysroot里没有这个库,需要从运行中的树莓派上拷贝:
- 用scp把树莓派上的相关库和头文件复制到本地sysroot:
# 复制库文件 scp pi@<你的树莓派IP>:/opt/vc/lib/* /opt/qt5pi/sysroot/opt/vc/lib/ # 复制头文件(EGL和GLES2相关) scp -r pi@<你的树莓派IP>:/opt/vc/include/EGL /opt/qt5pi/sysroot/opt/vc/include/ scp -r pi@<你的树莓派IP>:/opt/vc/include/GLES2 /opt/qt5pi/sysroot/opt/vc/include/
2. 给configure命令添加库和头文件路径参数
Qt的configure可能没自动识别到树莓派的VC库路径,你需要在原来的configure命令里手动指定这些路径。修改后的命令如下:
../qt-everywhere-opensource-src-5.7.1/configure \ -no-use-gold-linker \ -opengl es2 \ -device linux-rpi3-g++ \ -device-option CROSS_COMPILE=arm-linux-gnueabihf- \ -sysroot /opt/qt5pi/sysroot \ -prefix /usr/local/qt5pi \ -opensource \ -confirm-license \ -skip qtwebengine \ -skip qtscript \ -nomake examples \ -make libs \ # 新增的路径参数 -I /opt/qt5pi/sysroot/opt/vc/include \ -I /opt/qt5pi/sysroot/opt/vc/include/EGL \ -I /opt/qt5pi/sysroot/opt/vc/include/GLES2 \ -L /opt/qt5pi/sysroot/opt/vc/lib
3. 修复可能失效的软链接
从树莓派拷贝过来的库文件很多是软链接,而这些链接的路径是树莓派本地的绝对路径,在你的主机sysroot里会失效。进入sysroot的VC库目录,重新创建软链接:
cd /opt/qt5pi/sysroot/opt/vc/lib ln -sf libGLESv2.so.1 libGLESv2.so ln -sf libEGL.so.1 libEGL.so
4. 提前设置环境变量指定库搜索路径(可选)
如果上面的步骤还没解决问题,可以在运行configure前设置环境变量,强制交叉编译工具链优先搜索sysroot里的库:
export LDFLAGS="-L/opt/qt5pi/sysroot/opt/vc/lib -L/opt/qt5pi/sysroot/usr/lib/arm-linux-gnueabihf" export CFLAGS="-I/opt/qt5pi/sysroot/opt/vc/include -I/opt/qt5pi/sysroot/usr/include/arm-linux-gnueabihf"
设置完之后再运行修改后的configure命令。
按照上面的步骤操作后,链接器应该就能找到libGLESv2库了,你可以重新执行configure和make命令试试。
内容的提问来源于stack exchange,提问作者allebas
相关产品推荐
相关产品推荐

