工作环境
PC:Ubuntu18.04
QtCreator: 4.8.2
交叉编译环境:野火imxull6开发板提供的 5-编译工具链->qt交叉编译工具
在之前博客配置成功的交叉编译环境,编译Qt5.9.8自带部分Example时,出现
GLES3/gl3.h: No such file or directory
本人使用的例程为:
$QT_INSTALL_PATH/Examples/Qt-5.9.8/widgets/widgets/imageviewer
出错提示如下
经查找,是qopengl.h中包含了该文件,如上图所示。
既然包含了不存在的文件,那么对应解决方案可以取消包含该文件或添加该文件到对应目录,或者替换编译工具
经测试,以上三种方案都是可行的
方案一:取消包含该头文件
包含该头文件的原因是定义了
QT_OPENGL_ES_3
这个宏,查找该宏定义出处,发现是
qconfig.h头文件中(全路径为:)
/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/qt5/QtCore/qconfig.h
中#117
#if defined(QT_OPENGL_ES_3) && defined(QT_NO_OPENGL_ES_3) # undef QT_OPENGL_ES_3 #elif !defined(QT_OPENGL_ES_3) && !defined(QT_NO_OPENGL_ES_3) # define QT_OPENGL_ES_3 #endif
由于项目中没有定义
QT_OPENGL_ES_3
QT_NO_OPENGL_ES_3
因此在这里会定义
# define QT_OPENGL_ES_3
找到出处,那么取消该宏定义就简单了
方法一: 删除qconfig.h中以上关于定义 QT_OPENGL_ES_3 的相关代码
方法二: 在qconfig.h 中 开头位置添加
#define QT_NO_OPENGL_ES_3
方法三: 由图一出错提示可知,源码文件是因为包含<QtWidgets>而包含<qopengl.h>,所以可以在源码文件包含<QtWidgets>添加如下代码
#define QT_NO_OPENGL_ES_3 //在源码中包含QtWidgets的文件上方添加此行,可在编译此文件时,不再包含<GLES3/gl3.h> #include <QtWidgets>
方案二:添加对应头文件
本人没有重新移植gl3相关库,在终端进入如下目录
cd /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/GLES2/gl2.h sudo mkdir GLES3 sudo cp GLES2/gl2.h GLES3/gl3.h
可创建gl3.h文件,编译成功(此方法未知会否出现其他意外)
方案三:替换编译工具
由于本人搭建交叉编译环境后就已经重新编译Qt5.9.8的源码移植到开发板中,而且一直使用移植后的版本,使用Qt的例程时没有出现过以上问题。因此该方案同样可行。
方案一和方案二仅测试可编译成功,因身边没有开发板,也就没有测试在开发板中运行了。