Error on Qt 6 Building from source for Windows Based
-
@Christian-Ehrlicher you are right !
-
@Chris-Kawa thanks. interesting to try !.
-
Hi,
Trying do_it.bat with VS2019 and Qt source 6.2.2 for x64 binaries (or following Qt Buidling from source) directives,
I got these errors:Can you help me ?
Thank you
NiVaEither set CMAKE_PREFIX_PATH or LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. You will also need to set the FEATURE_clang CMake variable to ON to re-evaluate this check. WARNING: Clang-based lupdate parser will not be available. LLVM and Clang C++ libraries have not been found. You will need to set the FEATURE_clangcpp CMake variable to ON to re-evaluate this check. WARNING: QtWebEngine won't be built. Tool gperf is required. WARNING: QtPdf won't be built. Tool gperf is required. Qt is now configured for building. Just run 'cmake --build . --parallel' Once everything is built, you must run 'ninja install' Qt will be installed into 'C:/Qt/6.2.2/msvc2019_64' To configure and build other Qt modules, you can use the following convenience script: C:/Qt/6.2.2/msvc2019_64/bin/qt-configure-module.bat If reconfiguration fails for some reason, try to remove 'CMakeCache.txt' from the build directory -- Configuring incomplete, errors occurred! See also "C:/Qt/6.2.2/Build/CMakeFiles/CMakeOutput.log". See also "C:/Qt/6.2.2/Build/CMakeFiles/CMakeError.log". CMake Error at C:/Qt/6.2.2/src/qtbase/cmake/QtProcessConfigureArgs.cmake:947 (message): CMake exited with code 1. ninja: error: loading 'build.ninja': Le fichier spÚcifiÚ est introuvable. CMake Error: Error processing file: C:/Qt/6.2.2/Build/cmake_install.cmake
Notice that directory C:/Qt/6.2.2/Build disappear at this moment building.
Here is and extract of CMakeError :Performing C++ SOURCE FILE Test HAVE_ICONV failed with the following output: Change Dir: C:/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_50daa && [1/2] Building CXX object CMakeFiles/cmTC_50daa.dir/Release/src.cxx.obj [2/2] Linking CXX executable Release\cmTC_50daa.exe FAILED: Release/cmTC_50daa.exe cmd.exe /C "cd . && C:\Strawberry\c\bin\c++.exe -DNDEBUG -O2 CMakeFiles/cmTC_50daa.dir/Release/src.cxx.obj -o Release\cmTC_50daa.exe -Wl,--out-implib,Release\libcmTC_50daa.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: C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/lib/../lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x63): undefined reference to `__imp_GetACP' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed. Source file was: #include <iconv.h> int main(int, char **) { iconv_t x = iconv_open("", ""); iconv_close(x); return 0; } Performing C++ SOURCE FILE Test HAVE_ICONV_WITH_LIB failed with the following output: Change Dir: C:/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_67c23 && [1/2] Building CXX object CMakeFiles/cmTC_67c23.dir/Release/src.cxx.obj [2/2] Linking CXX executable Release\cmTC_67c23.exe FAILED: Release/cmTC_67c23.exe cmd.exe /C "cd . && C:\Strawberry\c\bin\c++.exe -DNDEBUG -O2 CMakeFiles/cmTC_67c23.dir/Release/src.cxx.obj -o Release\cmTC_67c23.exe -Wl,--out-implib,Release\libcmTC_67c23.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: C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/lib/../lib/libiconv.a(localcharset.o):localcharset.c:(.text+0x63): undefined reference to `__imp_GetACP' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed. Source file was: #include <iconv.h> int main(int, char **) { iconv_t x = iconv_open("", ""); iconv_close(x); return 0; } Performing C++ SOURCE FILE Test HAVE_uacpp failed with the following output: Change Dir: C:/Qt/6.2.2/Build/CMakeFiles/CMakeTmp Run Build Command(s):C:/ninja-win/ninja.exe -f build-Release.ninja cmTC_ab42c && [1/2] Building CXX object CMakeFiles/cmTC_ab42c.dir/Release/src.cxx.obj FAILED: CMakeFiles/cmTC_ab42c.dir/Release/src.cxx.obj C:\Strawberry\c\bin\c++.exe -DHAVE_uacpp -DCMAKE_INTDIR=\"Release\" -DNDEBUG -O2 -std=gnu++17 -o CMakeFiles/cmTC_ab42c.dir/Release/src.cxx.obj -c C:/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx C:/Qt/6.2.2/Build/CMakeFiles/CMakeTmp/src.cxx:3:10: fatal error: uaplatformlayer.h: No such file or directory #include <uaplatformlayer.h> ^~~~~~~~~~~~~~~~~~~ compilation terminated. ninja: build stopped: subcommand failed. Source file was: #include <stdio.h> #include <uaplatformlayer.h> #include <uastring.h> #include <uasession.h> using namespace UaClientSdk; int main(int /*argc*/, char ** /*argv*/) { UaPlatformLayer::init(); UaSession *session = new UaSession; UaPlatformLayer::cleanup(); return 0; }
-
@NiVa99 The bat is explicitly for msvc. Your errors seem to come from using clang without environment set up for it. The path has
msvc2019_64
in it and your build errors are from gcc/mingw.You seem to have completely mixed up environment for those three different compilers. Which one do you actually want to use - msvc, clang or gcc/mingw ?
Notice that directory C:/Qt/6.2.2/Build disappear at this moment building.
Well yeah, because it's a temporary build directory and the bat removes it after the install:
rmdir %BUILD_DIR% /Q /S
. If you want it to stay just modify the bat and remove or comment out that line. -
I have succeeded to build Qt6.2.2 for arch amd64 and x64 with this following bat.
But interested in to build with mingw too:: x64 amd64 x86 SET ARCH=x86 :: SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat" SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat %ARCH%" 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="C:\release-vs2019-%ARCH%" 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 . cd %INSTALL_DIR% rmdir %BUILD_DIR% /Q /S pause
-
For mingw don't call the msvc bat to setup environment. I don't know if mingw has a handy bat to set it up for you, but if not then just do it manually by adding the relevant paths to bin, include and lib directories. Something like this
SET PATH=%PATH%;C:\mingw\bin SET CPLUS_INCLUDE_PATH=C:\mingw\include SET LIBRARY_PATH=C:\mingw\lib
substituting the paths to your actual mingw installation directories.
-
Thank you, I have removed rmdir line and I will try mingw build.
Just staying on msvc build, I have just one architecture x86 that does not build either than amd64 dll seeing it with Dependencies.
d:\Logiciels\Qt\6.2.2>SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat x86" d:\Logiciels\Qt\6.2.2>"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat x86" '"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. d:\Logiciels\Qt\6.2.2>SET SRC_DIR="d:\Logiciels\Qt\6.2.2\Src" d:\Logiciels\Qt\6.2.2>SET BUILD_DIR="d:\Logiciels\Qt\6.2.2\Build" d:\Logiciels\Qt\6.2.2>SET INSTALL_DIR="C:\release-vs2019-x86" d:\Logiciels\Qt\6.2.2>SET CONFIGURE_OPTIONS=-debug-and-release -mp -opensource -confirm-license d:\Logiciels\Qt\6.2.2>call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat x86" '"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. d:\Logiciels\Qt\6.2.2>mkdir "d:\Logiciels\Qt\6.2.2\Build" Un sous-répertoire ou un fichier d:\Logiciels\Qt\6.2.2\Build existe déjà. d:\Logiciels\Qt\6.2.2>mkdir "C:\release-vs2019-x86" Un sous-répertoire ou un fichier C:\release-vs2019-x86 existe déjà. d:\Logiciels\Qt\6.2.2>cd "d:\Logiciels\Qt\6.2.2\Build" d:\Logiciels\Qt\6.2.2\Build>call "d:\Logiciels\Qt\6.2.2\Src"\configure -prefix "C:\release-vs2019-x86" -debug-and-release -mp -opensource -confirm-license + cd qtbase + d:\Logiciels\Qt\6.2.2\src\qtbase\configure.bat -top-level -prefix "C:\release-vs2019-x86" -debug-and-release -mp -opensource -confirm-license
-
'"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.