fatal error: GLES3/gl31.h: 没有那个文件或目录

环境:需求是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/

你可能感兴趣的:(C++)