How can i static build qt project in Visual Studio
-
i watch this video https://youtu.be/KCH92zvrHas?t=330t
and his have a gnuwin32 file in qt src but i dont have
and he is using this file for build.. -
@Christian-Ehrlicher did u have anything info?
-
@vandal_op said in How can i static build qt project in Visual Studio:
did u have anything info?
No - I already told you that you have to make sure that configure picks up the msvc compiler and not the MinGW one as you can't mix the two compiler. So clean up your build dir and start over.
-
@Christian-Ehrlicher finaly i can build now but not working again..
https://prnt.sc/dw5Ji91U6kK6
prefix folder is empty -
doesnt have jom make file
-
Have 3 folders (you can name them however you want):
/src //this is where Qt sources are /build // this is where you build /install //this is where you install
From start menu open x64 Native Tools Command prompt for VS. You don't need admin privileges.
cd
to your build directory (not src!)
In your build directory:
../src/configure -prefix <full path to install dir> -static -static-runtime <any other options you want>
cmake --build . --parallel
cmake --install .
if you also built debug version then alsocmake --install . --config Debug
That's it, 3 or 4 commands. -
@Chris-Kawa
it was running fine but still gave an error -
Read the third line.
-
- cd c:/qt-static/build
- c:/qt-static/src/configure -debug-and-release -commercial -confirm-license -static -platform win32-msvc2019 -nomake examples -nomake tests -prefix C:\Qt-Static\install
- cmake --build . --parallel
build success.
install error
I think I did all the steps correctly but the result is still like this.
-
Don't re-run configure in a directory that you have a failed build in. If a build fails clear the build directory and start over from clean state: empty dir, configure, build, install.
Don't pass-platform win32-msvc2019
. Platform is deduced from the environment i.e. the command prompt bat you used. Note that you're building 32bit version. If you want to build 64bit version start the x64 command prompt.
Don't try to build modules you don't need. In the src dir you have directories like this:qt3d qt5compat qtactiveqt qtcharts ...
Each of them is a Qt module. You need qtbase and qttools. Others are optional. Go through the list and for each module you're not planning to use exclude it via parameter of configure. Some of those are also not supported in a static build (you got a message about it in your previous post). Exclude those too. For example to exclude qtwebengine pass
-skip qtwebengine
. Do that for every module that is not supported or you're not planning to use. -
@Chris-Kawa I need this modules with static
- core;gui;network;widgets
i try build with this code still error in a few minute
- c:/qt-static/src/configure -debug-and-release -commercial -confirm-license -static -nomake examples -nomake tests -prefix C:\Qt-Static\install -skip qtwebengine -skip qt3d -skip qt5compat -skip qtactiveqt -skip qtcharts
-
Please put some effort in. Try to understand what you're doing. Don't just copy/paste stuff.
First - you're running this from a Developer Command Prompt. I said you should be running this from x64 Native Tools Command Prompt (or x86 if you want 32bit build).
Second - these were just the couple modules I listed as an example. There's 38 modules in there. All of
core;gui;network;widgets
are in the qtbase module, so you can skip everything except base and tools.Clean your build dir, reconfigure correctly and build again.
-
@Christian-Ehrlicher
I made a list of static occurrences and passed the unnecessary ones with the "skip" command, but there was still an error..
I did some research and found out that I needed to upgrade my Windows SDK version, doing that fixed the problem and it built!I made the necessary bindings with visual studio, but I need to compile as x64, is there a command in the "configure" file for this?
thank you for your help!!!
-
@vandal_op I told you multiple times - platform is determined from the environment. To build x64 run configure from x64 Native Tools Command Prompt.
-
@Chris-Kawa
x64 build is succesfull but when i try build on visual studio i get to much error
-
The std and Windows library implementations used by an app can be used in two ways: static and dynamic. Static means these runtime libraries are linked into your executable and deployed as part of it. Dynamic means that they use external dlls - either deployed explicitly along with your app, installed separately via Visual C++ Redistributable installer or provided by the system fallback (only in case of older versions).
Whether you choose static or dynamic runtime libraries is up to you, but whatever you choose all components of your app need to use the same setting. Go to your project settings and see C/C++ -> Code Generation -> Runtime Library option. There are 4 options, 2 for Release and 2 for Debug builds:
Multi-threaded (/MT) - this is the static Release version
Multi-threaded DLL (/MD) - this is the dynamic Release version
Multi-threaded Debug (/MTd) - this is the static Debug version
Multi-threaded Debug DLL (/MDd) - this is the dynamic Debug versionThe
mismatch detected for ...
message says you have a mismatch of those settings between what your application uses and what your Qt build used.If you passed
-static
to Qt's configure it was built with /MD option (dynamic). If you'd configure like I said with-static -static-runtime
it would've been configured with the /MT option (static).Since you have a mismatch you have two options now:
- Change the settings of your app to match that of Qt. Note that this is the dynamic option, so you'll have to distribute the runtime library dlls along with your exe or execute the Visual C++ Redistributable installer when you install your app.
- Go back and configure Qt with
-static -static-runtime
to match the setting of your app. This will create a self contained runtime library linked with your exe.
-
Hello!
Additionally, I would recommend to check the libs information after each Qt build. Please, do the following steps:- From
x64 Native Tools Command Prompt for VS 2019
navigate to the Qt lib directory, in my case:cd C:\QtStatic\6.3.2\msvc2019_64\lib
- Run this command:
lib /list Qt6Core.lib
, this command will output some info regarding your libs.static lib will display .obj files dynamic lib will display .dll files
- Run the following command:
dumpbin /directives Qt6Core.lib
. It will output the compiler version and runtime lib mode (Debug or Release), for example:/FAILIFMISMATCH:_MSC_VER=1900 /FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=0 /FAILIFMISMATCH:RuntimeLibrary=MT_StaticRelease
You can copy/paste the output here, so we can get more details about your current Qt build as well.
- From
-
@Christian-Ehrlicher @Cobra91151
I added the -static-runtime code and built it again, it's working fine now with exe project.Actually, my project is a dll and I get such an error when I compile and inject it, but when I compile and run it with exe, it works for everyone without any problems.
This error comes when I inject the dll I compiled with qt into any application.My dllmain code :
BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { MessageBoxA(NULL, "inject success", NULL, NULL); } return TRUE; }
-
@vandal_op
How do you "inject" it and why are you doing that in the first place?
Is the exe built with the same runtime library setting as the dll (like I said - it has to match everywhere)?
Is the exe and dll built with the same compiler version?
Is the exe using the same runtime library version?
Is the exe using the same Windows SDK version?
Have you tried to debug this app to see why it fails?