Error on Qt 6 Building from source for Windows Based
-
I am trying this version of bat.
:: x64 amd64 x86 :: SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat" SET ARCH=x86 :: SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat %ARCH%" SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" CALL %VS_ENVIRONMENT% SET SRC_DIR="d:\Logiciels\Qt\6.2.2\Src" SET BUILD_DIR="d:\Logiciels\Qt\6.2.2\Build" SET INSTALL_DIR="d:\Qt-6.2.2-release-vs2019-%ARCH%" SET CONFIGURE_OPTIONS=-debug-and-release -mp -opensource -confirm-license mkdir %BUILD_DIR% mkdir %INSTALL_DIR% cd %BUILD_DIR% CALL %SRC_DIR%\configure -prefix %INSTALL_DIR% %CONFIGURE_OPTIONS% cmake --build . --parallel 4 cmake --install . :: cd %INSTALL_DIR% :: rmdir %BUILD_DIR% /Q /S pause
which cause errors
Performing C++ SOURCE FILE Test HAVE_WIN10_WIN32_WINNT failed with the following output: Change Dir: D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_4e432 && [1/2] Building CXX object CMakeFiles/cmTC_4e432.dir/Release/src.cxx.obj **FAILED**: CMakeFiles/cmTC_4e432.dir/Release/src.cxx.obj C:\Strawberry\c\bin\c++.exe -DHAVE_WIN10_WIN32_WINNT -DCMAKE_INTDIR=\"Release\" -O3 -DNDEBUG -std=gnu++17 -o CMakeFiles/cmTC_4e432.dir/Release/src.cxx.obj -c D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx:6:10: error: #error "_WIN32_WINNT version too low" #error "_WIN32_WINNT version too low" ^~~~~ D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx:9:10: error: #error "WINVER version too low" #error "WINVER version too low" ^~~~~ ninja: build stopped: subcommand failed. Source file was: #include <windows.h> #if !defined(_WIN32_WINNT) && !defined(WINVER) #error "_WIN32_WINNT and WINVER are not defined" #endif #if defined(_WIN32_WINNT) && (_WIN32_WINNT < 0x0A00) #error "_WIN32_WINNT version too low" #endif #if defined(WINVER) && (WINVER < 0x0A00) #error "WINVER version too low" #endif int main() { return 0; } Performing C++ SOURCE FILE Test TEST_use_lld_linker failed with the following output: Change Dir: D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_01c1b && [1/2] Building CXX object CMakeFiles/cmTC_01c1b.dir/Release/src.cxx.obj **FAILED**: CMakeFiles/cmTC_01c1b.dir/Release/src.cxx.obj C:\Strawberry\c\bin\c++.exe -DTEST_use_lld_linker -DCMAKE_INTDIR=\"Release\" -O3 -DNDEBUG -fuse-ld=lld -std=gnu++17 -o CMakeFiles/cmTC_01c1b.dir/Release/src.cxx.obj -c D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx c++.exe: error: unrecognized command line option '-fuse-ld=lld'; did you mean '-fuse-ld=bfd'? ninja: build stopped: subcommand failed. Source file was: int main() { return 0; } Performing C++ SOURCE FILE Test TEST_enable_new_dtags failed with the following output: Change Dir: D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_ea62a && [1/2] Building CXX object CMakeFiles/cmTC_ea62a.dir/Release/src.cxx.obj [2/2] Linking CXX executable Release\cmTC_ea62a.exe FAILED: Release/cmTC_ea62a.exe cmd.exe /C "cd . && C:\Strawberry\c\bin\c++.exe -O3 -DNDEBUG -Wl,--enable-new-dtags CMakeFiles/cmTC_ea62a.dir/Release/src.cxx.obj -o Release\cmTC_ea62a.exe -Wl,--out-implib,Release\libcmTC_ea62a.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ." C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: unrecognized option '--enable-new-dtags' C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: use the --help option for usage information collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
-
The error tells you what's wrong. Mingw sets
_WIN32_WINNT
andWINVER
too low. I think Windows XP is its default and Qt6 requires at least Windows 10, so add defines for the appropriate versions in the configure params. Here are the values: WINVER and _WIN32_WINNT. -
Do you want to compile with MinGW or MSVC?
If MinGW - why do you call MSVC batch files which set MSVC specific env vars?
If MSVC - why do you call g++? -
Still does not explain why you set MSVC env vars when trying to build with MinGW.
-
Tyying this batch inspired from this post. I thank Chris Kawa.
I thought it was to build with MSVC 2019.
SET VS_ENVIRONMENT="c:\Program Files (x86)\Microsoft Visual Studio\2019\VC\Auxiliary\Build\vcvars64.bat" SET SRC_DIR="d:\Logiciels\Qt\6.2.2\Src" SET BUILD_DIR="d:\Logiciels\Qt\6.2.2\Build" SET INSTALL_DIR="d:\Logiciels\Qt\6.2.2\vs2019-x64" SET CONFIGURE_OPTIONS=-debug-and-release -mp -opensource -confirm-license call %VS_ENVIRONMENT% mkdir %BUILD_DIR% mkdir %INSTALL_DIR% cd %BUILD_DIR% call %SRC_DIR%\configure -prefix %INSTALL_DIR% %CONFIGURE_OPTIONS% cmake --build . --parallel cmake --install . cmake --install . --config Release cd %INSTALL_DIR% :: rmdir %BUILD_DIR% /Q /S pause
I got these error, have to set WINVER and _WIN32_WINNT defines but how doing it ?
Performing C++ SOURCE FILE Test HAVE_WIN10_WIN32_WINNT failed with the following output: Change Dir: D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_9e6d0 && [1/2] Building CXX object CMakeFiles/cmTC_9e6d0.dir/Release/src.cxx.obj FAILED: CMakeFiles/cmTC_9e6d0.dir/Release/src.cxx.obj C:\Strawberry\c\bin\c++.exe -DHAVE_WIN10_WIN32_WINNT -DCMAKE_INTDIR=\"Release\" -O3 -DNDEBUG -std=gnu++17 -o CMakeFiles/cmTC_9e6d0.dir/Release/src.cxx.obj -c D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx:6:10: error: #error "_WIN32_WINNT version **too low**" #error "_WIN32_WINNT version too low" ^~~~~ D:/Logiciels/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx:9:10: error: #error "WINVER version too low" #error "WINVER version too low" ^~~~~ ninja: build stopped: subcommand failed.
microsoft modifying-winver-and-win32-winnt
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00Do I have to modify CMakeLists.txt or is it possibe to pass these defines from batch ?
Thank you -
So I understood but don't know where can i add those defines'param for a build MSVC, in the bat or in cmakelists.txt or ninja config ?
Thank you.
-
@NiVa99 said:
So I understood but don't know where can i add those defines'param for a build MSVC, in the bat or in cmakelists.txt or ninja config ?
Sorry, but I'm completely confused now which build you're talking about. You're constantly mixing msvc, mingw and now ninja and I can't understand which errors you're getting from which build.
Could you maybe focus on one and state clearly which is it?
And don't modify any Qt files. -
Building according to this note Building Qt 6 from sources
Requirements are CMake, Ninja, Perl, Python.Build Qt from Sources I search for is doing it with MSVC 2019, VS2022 (and later Ming).
-
@NiVa99 said in Error on Qt 6 Building from source for Windows Based:
C:\Strawberry\c\bin\c++.exe
Remove C:\Strawberry\c\bin from your PATH environment variable, and try a clean build again.
Background: CMake prefers clang/gcc over MSVC, even on Windows. So if you have anything called clang.exe, c++.exe ... in your PATH cmake will try to use that for compilation. Anyhow, the binaries in C:\Strawberry\c\bin are only for internal use of Strawberry - at least they're not enough to compile Qt.
If you want to use MSVC, call vcvars64.bat like @Christian-Ehrlicher suggested. If you want to use MinGW, prefer one of the MinGW toolchains that are supported by Qt: https://wiki.qt.io/MinGW
-
Thank you !
Following your advise, I comment llvm, clang, perl, g++ so thery are out of PATH env var ( and after some where verifications), then launch configure.bat as described by official doc step-4-build-the-qt-library from src path like that :
********************************************************************** ** Visual Studio 2019 Developer Command Prompt v16.11.6 ** Copyright (c) 2021 Microsoft Corporation ********************************************************************** [vcvarsall.bat] Environment initialized for: 'x64' C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional>d: D:\>cd Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2 D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where where C:\Windows\System32\where.exe D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where clang Information : impossible de trouver des fichiers pour le(s) modèle(s) spécifié(s). D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where perl Information : impossible de trouver des fichiers pour le(s) modèle(s) spécifié(s). D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where ninja C:\ninja-win\ninja.exe C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where g++ Information : impossible de trouver des fichiers pour le(s) modèle(s) spécifié(s). D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where gcc Information : impossible de trouver des fichiers pour le(s) modèle(s) spécifié(s). D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>where cmake C:\CMake\bin\cmake.exe C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2>configure.bat + cd qtbase + D:\Logiciels\Qt\6.2.2\qt-everywhere-src-6.2.2\qtbase\configure.bat -top-level
This is the CMakeError.log
Checking whether the ASM compiler is GNU using "--version" did not match "(GNU assembler)|(GCC)|(Free Software Foundation)": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is Clang using "--version" did not match "(clang version)": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is AppleClang using "--version" did not match "(Apple LLVM version)": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is ARMClang using "--version" did not match "armclang": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is HP using "-V" did not match "HP C": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande error D8004 : '/V' nécessite un argument Checking whether the ASM compiler is Intel using "--version" did not match "(ICC)": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is IntelLLVM using "--version" did not match "(Intel[^ ]+oneAPI)": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '--version' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent Checking whether the ASM compiler is SunPro using "-V" did not match "Sun C": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande error D8004 : '/V' nécessite un argument Checking whether the ASM compiler is XL using "-qversion" did not match "XL C": Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30137 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés. cl : Ligne de commande warning D9002 : option '-qversion' inconnue ignorée cl : Ligne de commande error D8003 : nom de fichier de la source absent
Amazing.