From 4ad464461f285af3fb2845eb27b1a20fc0b09b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 20 Oct 2020 16:42:10 +0200 Subject: [PATCH] Fix linking of non-console application on mingw As a result of b5af1408099d the link dependency to the mingw32 static library was ordered after the entrypoint library, which resulted in the WinMain symbol not being found during linking due to how the static linker processes archives. Fixes: QTBUG-87725 Change-Id: I8e075f91f7f06dcdc618a4e0ae6d9c1d832888c0 Reviewed-by: Alexandru Croitor --- mkspecs/features/entrypoint.prf | 11 ++++++++++- src/entrypoint/entrypoint.pro | 1 - 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/entrypoint.prf b/mkspecs/features/entrypoint.prf index 8442f8930bc..4601455c4a5 100644 --- a/mkspecs/features/entrypoint.prf +++ b/mkspecs/features/entrypoint.prf @@ -1,2 +1,11 @@ -qt:!console:contains(TEMPLATE, ".*app"): \ +qt:!console:contains(TEMPLATE, ".*app") { + # This library needs to come before the entry-point library in the + # linker line, so that the static linker will pick up the WinMain + # symbol from the entry-point library. Unfortunately qmake and the + # module system doesn't allow specifying linker flags or dependencies + # as part of the module that end up _before_ the library itself, so + # we have to work around it by declaring the dependency here. + mingw: LIBS += -lmingw32 + QT_PRIVATE += entrypoint +} diff --git a/src/entrypoint/entrypoint.pro b/src/entrypoint/entrypoint.pro index dd0618cd560..9dc8de57d45 100644 --- a/src/entrypoint/entrypoint.pro +++ b/src/entrypoint/entrypoint.pro @@ -23,7 +23,6 @@ win32 { mingw { DEFINES += QT_NEEDS_QMAIN MODULE_DEFINES += QT_NEEDS_QMAIN - LIBS += -lmingw32 } }