QT编译BUG解决–error: invalid conversion from ‘Window’ {aka ‘long unsigned int’} to ‘EGLNativeWindowType

  • Post author:
  • Post category:其他




问题

最近在瑞萨的板子上编译QT,使用的是wayland环境,编译过程中出现如下BUG。

compiling camera/qcameraexposure.cpp
../../../hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp: In member function ‘void QtWaylandClient::QWaylandXCompositeEGLWindow::createEglSurface():
../../../hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp:124:82: error: invalid conversion from ‘Window’ {aka ‘long unsigned int} to ‘EGLNativeWindowType’ {aka ‘void*} [-fpermissive]
     m_surface = eglCreateWindowSurface(m_glxIntegration->eglDisplay(), m_config, m_xWindow,0);
                                                                                  ^~~~~~~~~
In file included from ../../../hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglclientbufferintegration.h:57,
                 from ../../../hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h:46,
                 from ../../../hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp:40:
/usr/include/EGL/egl.h:126:109: note:   initializing argument 3 of ‘void* eglCreateWindowSurface(EGLDisplay, EGLConfig, EGLNativeWindowType, const EGLint*)’
 EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
                                                                                         ~~~~~~~~~~~~~~~~~~~~^~~



解决办法

首先创建补丁文件0001-Fix-compilation-for-Renesas-R-Car-M3.patch,内容如下所示:

From 1619f8bcdd1680c9557996b4977580090a749037 Mon Sep 17 00:00:00 2001
From: Johan Klokkhammer Helsing <johan.helsing at qt.io>
Date: Thu, 9 Feb 2017 12:53:56 +0100
Subject: [PATCH] Fix compilation for Renesas R-Car M3

Change-Id: Ib85001884bb880a18d8aa1241da0eb614a6b58ba
Reviewed-by: Paul Olav Tvete <paul.tvete at qt.io>

Upstream: http://code.qt.io/cgit/qt/qtwayland.git/patch/?id=8b204b2c56be5e7c1fd21144ae140c9b865dd86b
Signed-off-by: Peter Seiderer <ps.report at gmx.net>
---
 .../client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp               | 2 +-
 .../compositor/xcomposite-egl/xcompositeeglintegration.cpp              | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
index 431cb14..9c3dee3 100644
--- a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
+++ b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
@@ -121,7 +121,7 @@ void QWaylandXCompositeEGLWindow::createEglSurface()
     XCompositeRedirectWindow(m_glxIntegration->xDisplay(), m_xWindow, CompositeRedirectManual);
     XMapWindow(m_glxIntegration->xDisplay(), m_xWindow);
 
-    m_surface = eglCreateWindowSurface(m_glxIntegration->eglDisplay(), m_config, m_xWindow,0);
+    m_surface = eglCreateWindowSurface(m_glxIntegration->eglDisplay(), m_config, reinterpret_cast<EGLNativeWindowType>(m_xWindow), nullptr);
     if (m_surface == EGL_NO_SURFACE) {
         qFatal("Could not make eglsurface");
     }
diff --git a/src/hardwareintegration/compositor/xcomposite-egl/xcompositeeglintegration.cpp b/src/hardwareintegration/compositor/xcomposite-egl/xcompositeeglintegration.cpp
index 3cc0ba0..071b088 100644
--- a/src/hardwareintegration/compositor/xcomposite-egl/xcompositeeglintegration.cpp
+++ b/src/hardwareintegration/compositor/xcomposite-egl/xcompositeeglintegration.cpp
@@ -129,7 +129,7 @@ QOpenGLTexture *XCompositeEglClientBuffer::toOpenGlTexture(int plane)
     attribList.append(EGL_TEXTURE_2D);
     attribList.append(EGL_NONE);
 
-    EGLSurface surface = eglCreatePixmapSurface(m_integration->eglDisplay(),config,pixmap,attribList.constData());
+    EGLSurface surface = eglCreatePixmapSurface(m_integration->eglDisplay(), config, reinterpret_cast<EGLNativePixmapType>(pixmap), attribList.constData());
     if (surface == EGL_NO_SURFACE) {
         qDebug() << "Failed to create eglsurface" << pixmap << compositorBuffer->window();
     }
-- 
2.16.3


之后将其复制到qt-source-code/qtwayland下面:使用指定打补丁:

patch -p1 < 0001-Fix-compilation-for-Renesas-R-Car-M3.patch

然后就可以正常编译了。

参考文章

[Buildroot] [git commit] qt5wayland: fix hardwareintegration/client/xcomposite-egl compile



版权声明:本文为weixin_40293570原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。