Arm Qt編譯Qt例程出錯 GLES3/gl3.h: No such file or directory 解決方法


工作環境

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

出錯提示如下

GLES3/gl3.h: No such file or directory

經查找,是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的例程時沒有出現過以上問題。因此該方案同樣可行。

 

方案一和方案二僅測試可編譯成功,因身邊沒有開發板,也就沒有測試在開發板中運行了。

 



 
 
 
         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM