环境:需求是armV8.2环境下使用qt库中qgl、qwidget等控件,x86下环境正常使用,在arm环境报错:In file included from /usr/include/aarch64-linux-gnu/qt5/QtOpenGL/qgl.h:45:0,
/usr/include/aarch64-linux-gnu/qt5/QtGui/qopengl.h:105:13: fatal error: GLES3/gl31.h: 没有那个文件或目录
问题分析:arm环境默认qt使用opengl库是GLES,GLES不支持固定管线qt代码的实现,这样有两种方法解决思路,一种是改变qt不再指向使用GLES,而是使用opengl下的GL/gl.h,即正常的opengl;另一种方式是更改代码为活动管线(独立写shader),不再使用qt下插件qgl等。
选择第一种方式:通过重新编译qt源码,我是通过删除自己的qt环境,源码重新编译安装的方式来实现的,现在发现qt是可以共存的,调整qtcreator指向到新编译好的qt库就好了。
具体过程:
1. 下载qt源码http://download.qt.io/archive/qt/,选择自己需要的版本,windows下载zip压缩版本,linux下载tar版本压缩,我先现在的zip,configure时总是提示行数有\r这个错误,更改到tar版本通过,我下载的是qt-everywhere-opensource-src-5.9.5.tar.xz源码。
2. 编译前需要安装apt-get install libssl1.0-dev,解压后运行./configure -opengl desktop -nomake tests,中间-opengl destop是qt选择指定哪个opengl版本,咱们指定的版本是原生opengl版本。默认make install 到/usr/local/Qt-5.9.5/文件夹。
3.设置qtcreator指向版本,安装源码编译并不会顶掉原来的qt配置,vim ~/.profile 添加
QTDIR=/usr/local/Qt-5.9.5
PATH=$QTDIT/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH LD_LIBRARY_PATH
cd到/usr/lib/aarch64-linux-gnu/qtchooser,vim default.conf更改到新的qmake以及qt库
/usr/local/Qt-5.9.5/bin
/usr/local/Qt-5.9.5/lib
运行qmake -v时,查看已经替换了
QMake version 3.1
Using Qt version 5.9.5 in /usr/local/Qt-5.9.5/lib
执行sudo qtchooser -install Qt5.9.5 /usr/local/Qt-5.9.5/bin/qmake 查看qtchooser -l,已经添加进去了
4
5
Qt5.9.5
default
qt4-aarch64-linux-gnu
qt4
qt5-aarch64-linux-gnu
qt5
执行export QT_SELECT=Qt5.9.5,设置qt默认版本
4. 打开qtcreator,重新配置,点击工具,构建与配置,设置默认Qt Versions到新编译好的路径qmake即可,正常这里只要选择默认和应用就能成功。
5. qtcreator中文输入法不能用时 sudo apt-get install fcitx-frontend-qt5,查看安装路径dpkg -L fcitx-frontend-qt5 | grep .so
/usr/lib/aarch64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so
执行sudo cp /usr/lib/aarch64-linux-gnu/qtcreator/plugins/libfcitxplatforminputcontextplugin.so /usr/local/Qt-5.9.5/plugins/platforminputcontexts,修改权限sudo chmod 775 libfcitxplatforminputcontextplugin.so,重启成功
6. 重新编译报错的项目,这次使用的是正常的opengl版本,成功,祝好运
ps:参考https://blog.csdn.net/xiaoxiaoyusheng2012/article/details/45196879
https://blog.csdn.net/xyping_/article/details/82810928
https://blog.csdn.net/aamahone/article/details/86515536
https://blog.csdn.net/u010320855/article/details/71629948/