工作環境
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的例程時沒有出現過以上問題。因此該方案同樣可行。
方案一和方案二僅測試可編譯成功,因身邊沒有開發板,也就沒有測試在開發板中運行了。