Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. Qt 6
  4. Qt 6 undefined reference to WinMain on MinGW
Forum Updated to NodeBB v4.3 + New Features

Qt 6 undefined reference to WinMain on MinGW

Scheduled Pinned Locked Moved Solved Qt 6
21 Posts 4 Posters 7.9k Views 1 Watching
  • 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.
  • Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by Christian Ehrlicher
    #8

    @VRonin said in Qt 6 undefined reference to WinMain on MinGW:

    It's not an option it's built into CMake

    'This variable is often added to projects as an option() so that each user of a project can decide if they want to build the project using shared or static libraries.'

    I'm lazy and just want to activate an option :)

    And your new project again gives the linker error when WIN32 is specified

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    1 Reply Last reply
    1
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #9

      And one more, please try:

      -target_link_libraries(MyLib PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
      +target_link_libraries(MyLib PUBLIC Qt6::Core Qt6::Gui Qt6::Widgets)

      :)

      A cmake problem with some dependencies when a library is linked PRIVATE in a lib and then directly in an application?

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      VRoninV 1 Reply Last reply
      0
      • Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #10

        Found it - link order problem: libQt6EntryPoint.a must be after -lmingw32 in the link order (linklibs.rsp). Will dig deeper how to fix it.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        VRoninV 1 Reply Last reply
        4
        • Christian EhrlicherC Christian Ehrlicher

          Found it - link order problem: libQt6EntryPoint.a must be after -lmingw32 in the link order (linklibs.rsp). Will dig deeper how to fix it.

          VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by
          #11

          @Christian-Ehrlicher ABSOLUTE LEGEND!

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          1
          • Christian EhrlicherC Christian Ehrlicher

            And one more, please try:

            -target_link_libraries(MyLib PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
            +target_link_libraries(MyLib PUBLIC Qt6::Core Qt6::Gui Qt6::Widgets)

            :)

            A cmake problem with some dependencies when a library is linked PRIVATE in a lib and then directly in an application?

            VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #12

            @Christian-Ehrlicher said in Qt 6 undefined reference to WinMain on MinGW:

            -target_link_libraries(MyLib PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
            +target_link_libraries(MyLib PUBLIC Qt6::Core Qt6::Gui Qt6::Widgets)

            This fixes the build for some reason

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            Christian EhrlicherC 1 Reply Last reply
            0
            • VRoninV VRonin

              @Christian-Ehrlicher said in Qt 6 undefined reference to WinMain on MinGW:

              -target_link_libraries(MyLib PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
              +target_link_libraries(MyLib PUBLIC Qt6::Core Qt6::Gui Qt6::Widgets)

              This fixes the build for some reason

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #13

              @VRonin said in Qt 6 undefined reference to WinMain on MinGW:

              This fixes the build for some reason

              Linking all Qt libraries private for a shared lib somehow confuses cmake so INTERFACE_LINK_LIBRARIES is not interpreted when linking against this lib and the Qt libraries later on.

              btw: PRIVATE is not correct, it should be PUBLIC and therefore it was not noticed until now.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              VRoninV 1 Reply Last reply
              0
              • Christian EhrlicherC Christian Ehrlicher

                @VRonin said in Qt 6 undefined reference to WinMain on MinGW:

                This fixes the build for some reason

                Linking all Qt libraries private for a shared lib somehow confuses cmake so INTERFACE_LINK_LIBRARIES is not interpreted when linking against this lib and the Qt libraries later on.

                btw: PRIVATE is not correct, it should be PUBLIC and therefore it was not noticed until now.

                VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #14

                @Christian-Ehrlicher said in Qt 6 undefined reference to WinMain on MinGW:

                PRIVATE is not correct, it should be PUBLIC

                In this particular case it is indeed wrong but if you think of a library not exposing Qt (for example, a library to read/write xml files that internally uses QXmlStreamReader/QXmlStreamWriterer), the application linking to it might or might not link to Qt itself so PUBLIC in that case would be wrong.
                If this is unclear I can change the minimal example to show what I mean

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                Christian EhrlicherC 1 Reply Last reply
                0
                • VRoninV VRonin

                  @Christian-Ehrlicher said in Qt 6 undefined reference to WinMain on MinGW:

                  PRIVATE is not correct, it should be PUBLIC

                  In this particular case it is indeed wrong but if you think of a library not exposing Qt (for example, a library to read/write xml files that internally uses QXmlStreamReader/QXmlStreamWriterer), the application linking to it might or might not link to Qt itself so PUBLIC in that case would be wrong.
                  If this is unclear I can change the minimal example to show what I mean

                  Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #15

                  @VRonin It's not unclear. Just a reason why noone noticed until now :)

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  0
                  • Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #16

                    https://bugreports.qt.io/browse/QTBUG-93671

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    1 Reply Last reply
                    2
                    • S Offline
                      S Offline
                      supa5000
                      wrote on last edited by
                      #17

                      Dear all,

                      i write here for fellow googlers.

                      I stumbled to this thread with setup of msys2 - toolchain + qt6 binaries "mingw81_64". The project compiled fine under QT5 (and it compiles fine with qt6 on linux / ubuntu 20.04) - but with qt6.1.0 it failed on windows.

                      I did have a library, but it was not qt6 depending, like

                      add_library( foo_common STATIC )
                      add_library( foo_engine  STATIC )
                      target_link_libraries( foo_engine PRIVATE foo_common )
                      ...
                      add_executable( ${NAME} ... )
                      target_link_libraries( ${NAME} PUBLIC Qt6::Widgets )
                      target_link_libraries( ${NAME} PRIVATE foo_common foo_engine )
                      

                      I did try few swap places but it had no effect. Finally i added suggested

                      target_link_libraries( ${NAME} PUBLIC Qt6::EntryPoint)
                      

                      after the existing target_link_libraries calls and it did work.

                      VRoninV 1 Reply Last reply
                      0
                      • S supa5000

                        Dear all,

                        i write here for fellow googlers.

                        I stumbled to this thread with setup of msys2 - toolchain + qt6 binaries "mingw81_64". The project compiled fine under QT5 (and it compiles fine with qt6 on linux / ubuntu 20.04) - but with qt6.1.0 it failed on windows.

                        I did have a library, but it was not qt6 depending, like

                        add_library( foo_common STATIC )
                        add_library( foo_engine  STATIC )
                        target_link_libraries( foo_engine PRIVATE foo_common )
                        ...
                        add_executable( ${NAME} ... )
                        target_link_libraries( ${NAME} PUBLIC Qt6::Widgets )
                        target_link_libraries( ${NAME} PRIVATE foo_common foo_engine )
                        

                        I did try few swap places but it had no effect. Finally i added suggested

                        target_link_libraries( ${NAME} PUBLIC Qt6::EntryPoint)
                        

                        after the existing target_link_libraries calls and it did work.

                        VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by
                        #18

                        @supa5000 said in Qt 6 undefined reference to WinMain on MinGW:

                        I did try few swap places

                        Try replacing

                        target_link_libraries( ${NAME} PUBLIC Qt6::Widgets )
                        target_link_libraries( ${NAME} PRIVATE foo_common foo_engine )
                        

                        with

                        target_link_libraries( ${NAME} PRIVATE foo_common foo_engine Qt6::Widgets)
                        

                        while it is a workaround it worked for me

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        S 1 Reply Last reply
                        0
                        • VRoninV VRonin

                          @supa5000 said in Qt 6 undefined reference to WinMain on MinGW:

                          I did try few swap places

                          Try replacing

                          target_link_libraries( ${NAME} PUBLIC Qt6::Widgets )
                          target_link_libraries( ${NAME} PRIVATE foo_common foo_engine )
                          

                          with

                          target_link_libraries( ${NAME} PRIVATE foo_common foo_engine Qt6::Widgets)
                          

                          while it is a workaround it worked for me

                          S Offline
                          S Offline
                          supa5000
                          wrote on last edited by
                          #19

                          @VRonin said in Qt 6 undefined reference to WinMain on MinGW:

                          while it is a workaround it worked for me

                          Thanks for the detail - i tried but the result remained for some reason the same. I did - to be sure - try fresh (rm -rf build && cd build && cmake ../ && make) build but no effect.

                          To give the full details the actual link line was (that did not work until the entrypoint explicitly linked below)

                          target_link_libraries( ${name} PRIVATE foo_common foo_engine Qt6::Widgets Qt6::Qml Qt6::Quick)
                          # Try2: target_link_libraries( ${name} PRIVATE foo_common foo_engine Qt6::Qml Qt6::Quick Qt6::Widgets)
                          # enabling this makes the link go ok.
                          # target_link_libraries( ${name PUBLIC Qt6::EntryPoint)
                          

                          i tried also (as comment try2) move the Widgets as the last item but it seemed not have effect.

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            supa5000
                            wrote on last edited by
                            #20

                            I just pulled 6.2.0 and i stumbled again this; this time the Qt6::Entrypoint target was not found during CMake - so i removed it -- and now i am back with the missing WinMain issue.

                            Any ideas or updates? The linked bug https://bugreports.qt.io/browse/QTBUG-93671 seems stalled..

                            1 Reply Last reply
                            0
                            • J Offline
                              J Offline
                              j255
                              wrote on last edited by j255
                              #21

                              I'm running into this in windows. I've been looking at the qmake -d 2>&1 of a Qt example vs a QWT example. At some point in the QWT qmake generation it seems to loose the entrypoint_private module.

                              qt example: DEBUG 1: C:/tools/Qt/6.4.2/msvc2019_64/mkspecs/features/qt_functions.prf:379: modules := core gui entrypoint_private
                              qwt example: DEBUG 1: C:/tools/Qt/6.4.2/msvc2019_64/mkspecs/features/qt_functions.prf:379: modules := core gui printsupport concurrent opengl openglwidgets svg

                              I haven't been able to figure out the clean fix yet. I ended up diffing the makefiles between the examples and one the major differences was that the QWT example was missing the lib: Qt6EntryPoint.lib
                              So I added it to the qwt example pro like:
                              LIBS += C:\Qt\6.4.2\msvc2019_64\lib\Qt6EntryPoint.lib

                              and then the release version at least built successfully.

                              note: for diffing the qmake -d output it's handy to do a cut like this (powershell):
                              qmake -d 2>&1 | % { $_ -split ':' | select -last 1 }

                              this strips out a lot of paths making the diff easier to scan.
                              This was using Qwt 6.2.0, git sha:92baef.

                              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