Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. qtbase compilation error with --device linux-rasp-pi3-g++ qeglfskmsgbmwindow.cpp
QtWS25 Last Chance

qtbase compilation error with --device linux-rasp-pi3-g++ qeglfskmsgbmwindow.cpp

Scheduled Pinned Locked Moved Solved Mobile and Embedded
qtbasecompilationraspberry pieglfs
9 Posts 5 Posters 7.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    ronperek
    wrote on last edited by
    #1

    Hello. I'm new to compiling qt myself and I'm trying to compile qtbase for raspberry pi and I have compilation errors in file qeglfskmsgbmwindow.cpp. I think that maybe some eglfs source files changed with new raspbian stretch or something like that. Please point me in some direction how to fix it.
    I'm following tutorial from https://wiki.qt.io/RaspberryPi2EGLFS

    Technical information:
    device: Raspberry PI 3 B with Raspbian Stretch. apt uptade, apt upgrade and rpi-update done.
    QT: 5.11 from GIT
    configure command:

    ../qtbase/configure \
    -release -opengl es2 -v -opensource -confirm-license -make libs \
    -no-use-gold-linker \
    -device linux-rasp-pi3-g++ \
    -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- \
    -sysroot ~/raspi/sysroot \
    -prefix /usr/local/qt5pi \
    -extprefix ~/raspi/qt5pi \
    -hostprefix ~/raspi/qt5
    

    Build options:

    Build options:
      Mode ................................... release
      Optimize release build for size ........ no
      Building shared libraries .............. yes
      Using C++ standard ..................... C++11
      Using ccache ........................... no
      Using gold linker ...................... no
      Using new DTAGS ........................ yes
      Using precompiled headers .............. yes
      Using LTCG ............................. no
      Target compiler supports:
        NEON ................................. yes
      Build parts ............................ libs
    Qt modules and options:
      Qt Concurrent .......................... yes
      Qt D-Bus ............................... yes
      Qt D-Bus directly linked to libdbus .... yes
      Qt Gui ................................. yes
      Qt Network ............................. yes
      Qt Sql ................................. yes
      Qt Testlib ............................. yes
      Qt Widgets ............................. yes
      Qt Xml ................................. yes
    Support enabled for:
      Using pkg-config ....................... yes
      udev ................................... yes
      Using system zlib ...................... yes
    Qt Core:
      DoubleConversion ....................... yes
        Using system DoubleConversion ........ yes
      GLib ................................... yes
      iconv .................................. yes
      ICU .................................... no
      Tracing backend ........................ <none>
      Logging backends:
        journald ............................. no
        syslog ............................... no
        slog2 ................................ no
      Using system PCRE2 ..................... no
    Qt Network:
      getifaddrs() ........................... yes
      IPv6 ifname ............................ yes
      libproxy ............................... no
      Linux AF_NETLINK ....................... yes
      OpenSSL ................................ yes
        Qt directly linked to OpenSSL ........ no
      OpenSSL 1.1 ............................ yes
      SCTP ................................... no
      Use system proxies ..................... yes
    Qt Gui:
      Accessibility .......................... yes
      FreeType ............................... yes
        Using system FreeType ................ yes
      HarfBuzz ............................... yes
        Using system HarfBuzz ................ no
      Fontconfig ............................. yes
      Image formats:
        GIF .................................. yes
        ICO .................................. yes
        JPEG ................................. yes
          Using system libjpeg ............... yes
        PNG .................................. yes
          Using system libpng ................ yes
      EGL .................................... yes
      OpenVG ................................. no
      OpenGL:
        Desktop OpenGL ....................... no
        OpenGL ES 2.0 ........................ yes
        OpenGL ES 3.0 ........................ yes
        OpenGL ES 3.1 ........................ yes
        OpenGL ES 3.2 ........................ yes
      Vulkan ................................. no
      Session Management ..................... yes
    Features used by QPA backends:
      evdev .................................. yes
      libinput ............................... yes
      INTEGRITY HID .......................... no
      mtdev .................................. yes
      tslib .................................. yes
      xkbcommon-evdev ........................ yes
    QPA backends:
      DirectFB ............................... no
      EGLFS .................................. yes
      EGLFS details:
        EGLFS OpenWFD ........................ no
        EGLFS i.Mx6 .......................... no
        EGLFS i.Mx6 Wayland .................. no
        EGLFS RCAR ........................... no
        EGLFS EGLDevice ...................... no
        EGLFS GBM ............................ yes
        EGLFS VSP2 ........................... no
        EGLFS Mali ........................... no
        EGLFS Raspberry Pi ................... yes
        EGL on X11 ........................... no
      LinuxFB ................................ yes
      VNC .................................... yes
      Mir client ............................. no
      X11:
        Using system-provided XCB libraries .. yes
        EGL on X11 ........................... no
        Xinput2 .............................. yes
        XCB XKB .............................. yes
        XLib ................................. yes
        XCB render ........................... yes
        XCB GLX .............................. yes
        XCB Xlib ............................. yes
        Using system-provided xkbcommon ...... no
        Native painting (experimental) ....... yes
    Qt Widgets:
      GTK+ ................................... no
      Styles ................................. Fusion Windows
    Qt PrintSupport:
      CUPS ................................... yes
    Qt Sql:
      DB2 (IBM) .............................. no
      InterBase .............................. no
      MySql .................................. no
      OCI (Oracle) ........................... no
      ODBC ................................... yes
      PostgreSQL ............................. yes
      SQLite2 ................................ yes
      SQLite ................................. yes
        Using system provided SQLite ......... no
      TDS (Sybase) ........................... yes
    

    The error

    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp: In member function ‘virtual void QEglFSKmsGbmWindow::resetSurface()’:
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:58:5: error: ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’ was not declared in this scope
         PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
         ^
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:58:46: error: expected ‘;’ before ‘createPlatformWindowSurface’
         PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
                                                  ^
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:9: error: ‘createPlatformWindowSurface’ was not declared in this scope
             createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
             ^
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected type-specifier before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
             createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
                                                            ^
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected ‘>’ before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected ‘(’ before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:62:68: error: expected ‘)’ before ‘;’ token
                 eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"));
                                                                        ^
    /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:65:9: error: ‘createPlatformWindowSurface’ was not declared in this scope
         if (createPlatformWindowSurface) {
             ^
    Makefile:2877: recipe for target '.obj/qeglfskmsgbmwindow.o' failed
    
    
    A 1 Reply Last reply
    0
    • R ronperek

      Hello. I'm new to compiling qt myself and I'm trying to compile qtbase for raspberry pi and I have compilation errors in file qeglfskmsgbmwindow.cpp. I think that maybe some eglfs source files changed with new raspbian stretch or something like that. Please point me in some direction how to fix it.
      I'm following tutorial from https://wiki.qt.io/RaspberryPi2EGLFS

      Technical information:
      device: Raspberry PI 3 B with Raspbian Stretch. apt uptade, apt upgrade and rpi-update done.
      QT: 5.11 from GIT
      configure command:

      ../qtbase/configure \
      -release -opengl es2 -v -opensource -confirm-license -make libs \
      -no-use-gold-linker \
      -device linux-rasp-pi3-g++ \
      -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- \
      -sysroot ~/raspi/sysroot \
      -prefix /usr/local/qt5pi \
      -extprefix ~/raspi/qt5pi \
      -hostprefix ~/raspi/qt5
      

      Build options:

      Build options:
        Mode ................................... release
        Optimize release build for size ........ no
        Building shared libraries .............. yes
        Using C++ standard ..................... C++11
        Using ccache ........................... no
        Using gold linker ...................... no
        Using new DTAGS ........................ yes
        Using precompiled headers .............. yes
        Using LTCG ............................. no
        Target compiler supports:
          NEON ................................. yes
        Build parts ............................ libs
      Qt modules and options:
        Qt Concurrent .......................... yes
        Qt D-Bus ............................... yes
        Qt D-Bus directly linked to libdbus .... yes
        Qt Gui ................................. yes
        Qt Network ............................. yes
        Qt Sql ................................. yes
        Qt Testlib ............................. yes
        Qt Widgets ............................. yes
        Qt Xml ................................. yes
      Support enabled for:
        Using pkg-config ....................... yes
        udev ................................... yes
        Using system zlib ...................... yes
      Qt Core:
        DoubleConversion ....................... yes
          Using system DoubleConversion ........ yes
        GLib ................................... yes
        iconv .................................. yes
        ICU .................................... no
        Tracing backend ........................ <none>
        Logging backends:
          journald ............................. no
          syslog ............................... no
          slog2 ................................ no
        Using system PCRE2 ..................... no
      Qt Network:
        getifaddrs() ........................... yes
        IPv6 ifname ............................ yes
        libproxy ............................... no
        Linux AF_NETLINK ....................... yes
        OpenSSL ................................ yes
          Qt directly linked to OpenSSL ........ no
        OpenSSL 1.1 ............................ yes
        SCTP ................................... no
        Use system proxies ..................... yes
      Qt Gui:
        Accessibility .......................... yes
        FreeType ............................... yes
          Using system FreeType ................ yes
        HarfBuzz ............................... yes
          Using system HarfBuzz ................ no
        Fontconfig ............................. yes
        Image formats:
          GIF .................................. yes
          ICO .................................. yes
          JPEG ................................. yes
            Using system libjpeg ............... yes
          PNG .................................. yes
            Using system libpng ................ yes
        EGL .................................... yes
        OpenVG ................................. no
        OpenGL:
          Desktop OpenGL ....................... no
          OpenGL ES 2.0 ........................ yes
          OpenGL ES 3.0 ........................ yes
          OpenGL ES 3.1 ........................ yes
          OpenGL ES 3.2 ........................ yes
        Vulkan ................................. no
        Session Management ..................... yes
      Features used by QPA backends:
        evdev .................................. yes
        libinput ............................... yes
        INTEGRITY HID .......................... no
        mtdev .................................. yes
        tslib .................................. yes
        xkbcommon-evdev ........................ yes
      QPA backends:
        DirectFB ............................... no
        EGLFS .................................. yes
        EGLFS details:
          EGLFS OpenWFD ........................ no
          EGLFS i.Mx6 .......................... no
          EGLFS i.Mx6 Wayland .................. no
          EGLFS RCAR ........................... no
          EGLFS EGLDevice ...................... no
          EGLFS GBM ............................ yes
          EGLFS VSP2 ........................... no
          EGLFS Mali ........................... no
          EGLFS Raspberry Pi ................... yes
          EGL on X11 ........................... no
        LinuxFB ................................ yes
        VNC .................................... yes
        Mir client ............................. no
        X11:
          Using system-provided XCB libraries .. yes
          EGL on X11 ........................... no
          Xinput2 .............................. yes
          XCB XKB .............................. yes
          XLib ................................. yes
          XCB render ........................... yes
          XCB GLX .............................. yes
          XCB Xlib ............................. yes
          Using system-provided xkbcommon ...... no
          Native painting (experimental) ....... yes
      Qt Widgets:
        GTK+ ................................... no
        Styles ................................. Fusion Windows
      Qt PrintSupport:
        CUPS ................................... yes
      Qt Sql:
        DB2 (IBM) .............................. no
        InterBase .............................. no
        MySql .................................. no
        OCI (Oracle) ........................... no
        ODBC ................................... yes
        PostgreSQL ............................. yes
        SQLite2 ................................ yes
        SQLite ................................. yes
          Using system provided SQLite ......... no
        TDS (Sybase) ........................... yes
      

      The error

      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp: In member function ‘virtual void QEglFSKmsGbmWindow::resetSurface()’:
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:58:5: error: ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’ was not declared in this scope
           PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
           ^
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:58:46: error: expected ‘;’ before ‘createPlatformWindowSurface’
           PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
                                                    ^
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:9: error: ‘createPlatformWindowSurface’ was not declared in this scope
               createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
               ^
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected type-specifier before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
               createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
                                                              ^
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected ‘>’ before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:61:56: error: expected ‘(’ before ‘PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC’
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:62:68: error: expected ‘)’ before ‘;’ token
                   eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"));
                                                                          ^
      /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp:65:9: error: ‘createPlatformWindowSurface’ was not declared in this scope
           if (createPlatformWindowSurface) {
               ^
      Makefile:2877: recipe for target '.obj/qeglfskmsgbmwindow.o' failed
      
      
      A Offline
      A Offline
      ambershark
      wrote on last edited by
      #2

      @ronperek Are you trying this in a clean build directory? The issue may be a mix of the old EGL stuff and the freshly updated not being realized by the new build.

      My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

      R 1 Reply Last reply
      0
      • A ambershark

        @ronperek Are you trying this in a clean build directory? The issue may be a mix of the old EGL stuff and the freshly updated not being realized by the new build.

        R Offline
        R Offline
        ronperek
        wrote on last edited by ronperek
        #3

        @ambershark Yes. I clean the build directory before each try.

        To my understanding, the problem I have is that the qt developers have another version of EGL library than I have on raspberry.

        I found missing declarations in sysroot/usr/include/EGL/eglext.h - version from 2016-08-09
        but qt uses sysroot/opt/vc/include/EGL/eglext.h - version from 2009-01-20

        I replaced EGL from opt/vc/include with EGL from usr/include but now I have different problem:

        /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/qeglfsbrcmintegration.cpp:74:5: error: ‘EGL_DISPMANX_WINDOW_T’ was not declared in this scope
        

        Of course missing declaration is present in 2009 version and removed in 2016 version.

        Am I the first one trying to compile QT 5.11 for Raspberry PI 3 with Raspbian Stretch?
        Do you have some tutorial to get full QT 5 working on PI?

        A 1 Reply Last reply
        0
        • R ronperek

          @ambershark Yes. I clean the build directory before each try.

          To my understanding, the problem I have is that the qt developers have another version of EGL library than I have on raspberry.

          I found missing declarations in sysroot/usr/include/EGL/eglext.h - version from 2016-08-09
          but qt uses sysroot/opt/vc/include/EGL/eglext.h - version from 2009-01-20

          I replaced EGL from opt/vc/include with EGL from usr/include but now I have different problem:

          /home/ron/raspi/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/qeglfsbrcmintegration.cpp:74:5: error: ‘EGL_DISPMANX_WINDOW_T’ was not declared in this scope
          

          Of course missing declaration is present in 2009 version and removed in 2016 version.

          Am I the first one trying to compile QT 5.11 for Raspberry PI 3 with Raspbian Stretch?
          Do you have some tutorial to get full QT 5 working on PI?

          A Offline
          A Offline
          ambershark
          wrote on last edited by
          #4

          @ronperek Yea it definitely sounds like an issue of mixing EGLs. From what I recall last time I built Qt is that you could specify whether to use Qt's version or your own for most components which I would assume (big assumption here) applies to EGL as well. It's possible you can just point it at the EGL to use so you can make sure your Pi and build machine have the same EGL.

          I don't have a tutorial on getting Qt5 running on a Pi. I've never actually done it. I have done a decent amount of cross compiling though so I've helped a lot of people get their builds running for Pi on these forums (which you can search). Some of them listed tutorials but I didn't pay enough attention to them to remember.

          As for being the first one to build, you may be. :) 5.11 is in beta so it's possible you are on bleeding edge that just hasn't been thoroughly vetted yet.

          Also this:

          I replaced EGL from opt/vc/include with EGL from usr/include but now I have different problem

          will never work. You definitely don't want to just replace includes like that.

          It sounds like you just need to force Qt (via configure) to use the version of EGL you want. However be warned you'll have to have that one compiled for your Pi in order to have Qt build with it.

          My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

          1 Reply Last reply
          0
          • R Offline
            R Offline
            ronperek
            wrote on last edited by
            #5

            I finally managed to get it compiled. I know it's not the pretty solution and that this may get back at me sometime, but for now it works.
            I run "make" with 2009 EGL version in place, then i replaced it with 2016 EGL version and run "make" again to compile file that failed. Finally I restored 2009 EGL.

            A 1 Reply Last reply
            0
            • R ronperek

              I finally managed to get it compiled. I know it's not the pretty solution and that this may get back at me sometime, but for now it works.
              I run "make" with 2009 EGL version in place, then i replaced it with 2016 EGL version and run "make" again to compile file that failed. Finally I restored 2009 EGL.

              A Offline
              A Offline
              ambershark
              wrote on last edited by
              #6

              @ronperek Yea that's most definitely going to bite you, lol. I wish I could have helped you solve your problem I just haven't done that compile so my advice was just some guesses.

              Hopefully it works out for you, but I wouldn't feel confident distributing it like that. If it's for in house developers/user or just yourself then that's ok but if that goes to customers you will have some issues to deal with.

              My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

              1 Reply Last reply
              0
              • sneubertS Offline
                sneubertS Offline
                sneubert
                wrote on last edited by
                #7

                FYI
                https://forum.qt.io/topic/91596/raspberry-pi-3-compiling-qt-5-11-0-problem/3

                1 Reply Last reply
                2
                • L Offline
                  L Offline
                  lirik90
                  wrote on last edited by
                  #8

                  When i add this line:

                  typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
                  

                  after all include in file src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp compile was finished great.

                  1 Reply Last reply
                  1
                  • X Offline
                    X Offline
                    xuancong84
                    wrote on last edited by xuancong84
                    #9

                    I also encountered this problem. It can be solved by manually adding the following definition of this structure (from Raspberry Pi Video Core API) into EGL/eglplatform.h (adding additional definition will not break compilation on non-legacy code that does not use this structure). And you also need to add the definition of DISPMANX_ELEMENT_HANDLE_T before that. i.e.,

                    typedef uint32_t DISPMANX_ELEMENT_HANDLE_T;
                    typedef struct {
                      DISPMANX_ELEMENT_HANDLE_T element;
                      int width;   /* This is necessary because dispmanx elements are not queriable. */
                      int height;
                    } EGL_DISPMANX_WINDOW_T;
                    

                    After doing this, you will still encounter a few compilation errors in pointer casting. You can just forcefully cast all pointers over (or copy my code ). The compilation should proceed then.
                    The reason why the compilation breaks is because in the open-source community, many developers still come from private companies working on proprietary projects. Some need to show to their boss that they have done something, so they unnecessarily keeps changing definitions, names, removing structures they do not know about due to their ignorance on other platforms/architectures (so they can say "oh, I did code-base clean-up"). In the end, it causes massive compilation breaks/failures. However, the underlying code is still the same, that is why directly casting pointers over surprisingly works out in the end, which should not be the case if substantial development is present. In summary, the No.1 development principle is that code modification should be made as minimal as possible and should exist if and only if necessary.

                    1 Reply Last reply
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved