Error on Qt 6 Building from source for Windows Based
-
Hi,
IIRC, cmake 3.19.2 or newer is recommended but I don't have the source at hand.
-
You should update your cmake version.
-
Did you restart from a clean state ?
-
What did you do to ensure a clean state ?
-
Use 5.15 and you're fine. Don't know why everyone needs to use Qt6 when it's documented that it's not feature complete... Qt6 does not have any advantage for an average user at the current state.
-
This is the
do_it.bat
I'm using to build Qt6. Adjust the paths and configure options at the top to whatever you like. You only need to have CMake in PATH, nothing else, or you can just spell out its path right in the bat script.SET VS_ENVIRONMENT="C:\Program Files (x86)\Microsoft Visual Studio 2019\VC\Auxiliary\Build\vcvars64.bat" SET SRC_DIR="C:\Qt\6.0.1\Src" SET BUILD_DIR="C:\Qt\6.0.1\Build" SET INSTALL_DIR="C:\Qt\6.0.1\msvc2019_64" 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 Debug cd %INSTALL_DIR% rmdir %BUILD_DIR% /Q /S pause
This builds Qt out of source (the only sane way to do it cleanly), copies result to the install directory and removes the temporary build directory (which can get huuuge if you're building everything).
Some notes on the discussion points above:
- Depending on your version of VS (Pro, Cmmunity etc.) the VS install dir will look a bit different. If in doubt just find "x64 Native Tools Command Prompt for VS 2019" shortcut in your start menu and see where it points to
- There are couple of different .bats to set VS environment. For x64 build use either
vcvarsall.bat amd64
or a shortcutvcvars64.bat
- Keep source and build directories next to each other e.g.
<some path>\src
and<some path>\build
. Theoretically it should be possible to build out of source to anywhere, but I've had multiple problems with mismatched number of..
and the likes in the past so keep it this way just to make it easier for yourself. - It's a good idea to exclude whichever modules you don't need in configure options e.g.
-skip qtdatavis3d
. I usually use only about 3-5 modules and exclude everything else, which cuts down compilation time and output size immensely.
-
@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.