Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How can i static build qt project in Visual Studio
Forum Updated to NodeBB v4.3 + New Features

How can i static build qt project in Visual Studio

Scheduled Pinned Locked Moved Unsolved General and Desktop
33 Posts 5 Posters 4.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    vandal_op
    wrote on last edited by
    #13

    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..

    https://prnt.sc/dGJM8w4fCtwy

    https://prnt.sc/8ixug_JUdXLb

    https://prnt.sc/R_jmzIoEV6Bd

    1 Reply Last reply
    0
    • Christian EhrlicherC Christian Ehrlicher

      As you can see in your output you're building for MinGW, not MSVC. Adjust your environment (hint: Visual Studio Command prompt) so cl.exe is properly found by configure.bat/cmake.

      V Offline
      V Offline
      vandal_op
      wrote on last edited by
      #14

      @Christian-Ehrlicher did u have anything info?

      Christian EhrlicherC 1 Reply Last reply
      0
      • V vandal_op

        @Christian-Ehrlicher did u have anything info?

        Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #15

        @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.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        1 Reply Last reply
        0
        • V Offline
          V Offline
          vandal_op
          wrote on last edited by
          #16

          @Christian-Ehrlicher finaly i can build now but not working again..

          https://prnt.sc/dw5Ji91U6kK6
          prefix folder is empty

          https://prnt.sc/n7b1vcGn1pr_

          1 Reply Last reply
          0
          • V Offline
            V Offline
            vandal_op
            wrote on last edited by
            #17

            doesnt have jom make file

            https://prnt.sc/C683RFG_Wa2r

            1 Reply Last reply
            0
            • V Offline
              V Offline
              vandal_op
              wrote on last edited by
              #18

              alt text

              I seriously don't understand qt, I just want to compile as static and I couldn't do it in 3 days..

              1 Reply Last reply
              0
              • Chris KawaC Online
                Chris KawaC Online
                Chris Kawa
                Lifetime Qt Champion
                wrote on last edited by Chris Kawa
                #19

                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 also cmake --install . --config Debug
                That's it, 3 or 4 commands.

                V 1 Reply Last reply
                2
                • Chris KawaC Chris Kawa

                  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 also cmake --install . --config Debug
                  That's it, 3 or 4 commands.

                  V Offline
                  V Offline
                  vandal_op
                  wrote on last edited by
                  #20

                  @Chris-Kawa
                  alt text
                  it was running fine but still gave an error

                  1 Reply Last reply
                  0
                  • Chris KawaC Online
                    Chris KawaC Online
                    Chris Kawa
                    Lifetime Qt Champion
                    wrote on last edited by
                    #21

                    Read the third line.

                    V 1 Reply Last reply
                    1
                    • Chris KawaC Chris Kawa

                      Read the third line.

                      V Offline
                      V Offline
                      vandal_op
                      wrote on last edited by
                      #22

                      @Chris-Kawa

                      • 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.
                      alt text
                      install error
                      alt text

                      I think I did all the steps correctly but the result is still like this.

                      1 Reply Last reply
                      0
                      • Chris KawaC Online
                        Chris KawaC Online
                        Chris Kawa
                        Lifetime Qt Champion
                        wrote on last edited by
                        #23

                        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.

                        1 Reply Last reply
                        0
                        • V Offline
                          V Offline
                          vandal_op
                          wrote on last edited by vandal_op
                          #24

                          @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
                            alt text
                          1 Reply Last reply
                          0
                          • Chris KawaC Online
                            Chris KawaC Online
                            Chris Kawa
                            Lifetime Qt Champion
                            wrote on last edited by
                            #25

                            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.

                            1 Reply Last reply
                            1
                            • V Offline
                              V Offline
                              vandal_op
                              wrote on last edited by vandal_op
                              #26

                              @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!!!
                              alt text

                              Chris KawaC 1 Reply Last reply
                              0
                              • V vandal_op

                                @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!!!
                                alt text

                                Chris KawaC Online
                                Chris KawaC Online
                                Chris Kawa
                                Lifetime Qt Champion
                                wrote on last edited by
                                #27

                                @vandal_op I told you multiple times - platform is determined from the environment. To build x64 run configure from x64 Native Tools Command Prompt.

                                V 1 Reply Last reply
                                1
                                • Chris KawaC Chris Kawa

                                  @vandal_op I told you multiple times - platform is determined from the environment. To build x64 run configure from x64 Native Tools Command Prompt.

                                  V Offline
                                  V Offline
                                  vandal_op
                                  wrote on last edited by
                                  #28

                                  @Chris-Kawa
                                  x64 build is succesfull but when i try build on visual studio i get to much error
                                  alt text
                                  alt text
                                  alt text

                                  Cobra91151C 1 Reply Last reply
                                  0
                                  • Chris KawaC Online
                                    Chris KawaC Online
                                    Chris Kawa
                                    Lifetime Qt Champion
                                    wrote on last edited by Chris Kawa
                                    #29

                                    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 version

                                    The 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.
                                    1 Reply Last reply
                                    2
                                    • V vandal_op

                                      @Chris-Kawa
                                      x64 build is succesfull but when i try build on visual studio i get to much error
                                      alt text
                                      alt text
                                      alt text

                                      Cobra91151C Offline
                                      Cobra91151C Offline
                                      Cobra91151
                                      wrote on last edited by
                                      #30

                                      @vandal_op

                                      Hello!
                                      Additionally, I would recommend to check the libs information after each Qt build. Please, do the following steps:

                                      1. 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
                                      2. 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
                                        
                                      3. 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.

                                      1 Reply Last reply
                                      0
                                      • V Offline
                                        V Offline
                                        vandal_op
                                        wrote on last edited by vandal_op
                                        #31

                                        @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.

                                        alt text

                                        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;
                                        }
                                        
                                        Chris KawaC 1 Reply Last reply
                                        0
                                        • V vandal_op

                                          @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.

                                          alt text

                                          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;
                                          }
                                          
                                          Chris KawaC Online
                                          Chris KawaC Online
                                          Chris Kawa
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #32

                                          @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?

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved