Error on Qt 6 Building from source for Windows Based
-
'"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat x86"' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.Don't put x86 in the quotes because it treats
vcvarsall.bat x86
as a file name with space. Put the parameter outside of the quotes. It's the same for all architectures. You can also just usevcvars32.bat
without any parameters, which does the same. -
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.