21

I've been searching on the internet for some useful and clear information about this, it's annoying that such a trivial thing is so hard to do.

What I need is to create an executable file for my Qt project, in order to run it in other computers. My project runs nicely in the Qt Creator, but when I try to run the executable created in the release folder I get errors about some dll missing, and though I have put all of them in the same directory of my .exe I now got some errors about entrypoints in procedures inside the dll (QtCore4.dll).

The solution looks like to be a static linking, I've found many information about it, but none of them really helped me. Here is what I have tried so far:

  • Using the executable created in the release folder as I said above.
  • Static Linking, following this tutorial (and many others, all almost the same thing): http://doc.qt.io/qt-4.8/deployment-windows.html but I get the following error during the "configure -static": NMAKE : fatal error U1077: '"c:\Arquivos de programas\Microsoft Visual Studio 9. 0\VC\BIN\cl.EXE"' : return code '0x2' Stop. Building qmake failed, return code 2

For that I couldn't find any solution, so here I am, just trying to create an executable file for my Qt project, hope you guys can give me some light here.

Christophe Weis
  • 2,518
  • 4
  • 28
  • 32
Paulo Facó
  • 397
  • 1
  • 4
  • 9
  • See this related question http://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment/1654833#1654833 – Paul Dixon Nov 29 '11 at 14:50
  • I've found it before, but I got the error NMAKE : fatal error U1077: '"c:\Arquivos de programas\Microsoft Visual Studio 9. 0\VC\BIN\cl.EXE"' : return code '0x2' Stop. Building qmake failed, return code 2 When I try to run the configure, and I cant find an answer to that.. But thanks. – Paulo Facó Nov 29 '11 at 15:13

5 Answers5

21

Basically you have to look for mingw subfolder deep into qt tree, where qt utilities reside, and copy needed dll's.

These are the steps I follow, based upon QT 4.7.4, for packaging the application with correct shared libraries.

  1. Let's say you've installed QT under c:\qtsdk
  2. Open your project, and compile it in release mode.
  3. Go to this directory: C:\QtSDK\Desktop\Qt\4.7.4\mingw\bin -- it contains all shared libraries. Debug libraries end with a "d" -- frex, QtCore.dll is release version, while QtCoreD.dll is debug version
  4. Copy at least these files into your release directory (where your .exe lies)

    • mingwm10.dll
    • libgcc_s_dw2-1.dll
    • QtCore4.dll
    • QtGui4.dll

    I just built, tested and deployed a dummy project this way.

Max Lambertini
  • 3,583
  • 1
  • 19
  • 24
  • 1
    I dont have that directory (mingw\bin), probably cause I'm using Visual Studio? Anyway, I copy ALL the dll files from there to my .exe file and it worked. Its not the best solution but it will work for now. Thanks. – Paulo Facó Nov 29 '11 at 15:12
  • 1
    You can start removing the dll files one by one and checking to see if the program is still running. That way you can easily figure out which ones are needed. That's what I usually do when dealing with DLL dependencies. – sashoalm Nov 29 '11 at 15:15
  • I don't know if you configure .PRO file in VS2008, but some qt features require their own dll's. (QtSql, etc.). Most of the times you'll be fine by using just QtCore.dll and QtGui.dll. When you use advanced features like net communication, sql, webkit and the like, check the docs: you'll likely get pointers to the library used. You can also use Dependency Walker to see what DLLs your exe needs. – Max Lambertini Nov 29 '11 at 16:24
  • Note from 2023: The files in Step 4 are likely inaccurate for Qt5 and Qt6. The resulting .exe will likely request further files, which I was able to find at the location where my QT version is present. – HFOrangefish May 15 '23 at 12:57
8

Do these steps:

1- Open qt command-line window.

Qt command-line window

2- Go to the directory which .exe file exists (using cd command).

3- Run windeployqt.exe --quick . command

4- Run your exe file and enjoy it!

This video is great

hossein
  • 490
  • 5
  • 7
  • To deploy to a different folder, I had to copy the .dlls *as well as the platform/ directory* – Ralph Dec 09 '21 at 19:37
3

Here is what I did and I got it to work after some time;after making sure that your program builds inside Qtcreator,go to the directory that contains your exe and double click on it.(I'm using windows and don't know if it is the same on other platforms).A window should popup telling you which .dll is missing.Go to the directory where Qt is installed and type the exact name in the search bar(top-right in Windows 7) and the dll should show up in search results.Right click and choose open file location.Copy the file where your exe is located .Double click on the exe again.If another .dll is missing repeat the same thing until none is missing.In the end your program should run. Hope this helps.

gakwaya
  • 31
  • 1
2

So you downloaded Qt SDK and you want to link Qt libraries statically into you application, right?

First of all, if you link statically, you don't need any Qt*.dll to be present anywhere because it is built into the application. So that alone means that your application is built using dynamic linking.

From my experience, that safest way to get it all working is:

Download Qt sources, build and install them with nmake ( using Visual Studio Command Prompt from Menu Start -> Application -> Visual Studio 2008 ). Just remember that the size of the statically linked application is dependent on the size of the *.libs and these are dependent on the pre-build configuration, for example, you can minimize the size of you application by turning off some features ( this is an example config for MacOSX, just watch out for the ones specific for Windows and add proper plaftorm - see configure.exe --help for details ):

./configure -arch x86 -platform macx-g++ --universal -cocoa -debug-and-release -opensource -static -fast -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -qt-zlib -no-gif -no-libmng -qt-libmng -no-libtiff -qt-libjpeg -no-3dnow -sse -no-sse2 -no-openssl -no-dbus -no-phonon -no-multimedia -no-audio-backend -webkit -no-script -no-scripttools -no-declarative -nomake demos -nomake examples -no-exceptions -no-accessibility -confirm-license

Install, setup and use Visual Studio Add-In for you Qt project (here ).

Good Luck! :)

vizZ
  • 1,530
  • 14
  • 14
1

I share with you my solution. On my qt creator 4.2.1, I did these steps:

1) - I clicked on release and it generated a folder in my project directory like that: C:\Users\Samir\Documents\Qt-Projects\build-Calculator-Desktop_Qt_5_8_0_MinGW_32bit-Release.

2) - I opened the terminal qt 5.8 for desktop and I navigated to my project directory where the .exe located.
3) - Finally, I ran the command line windeployqt.exe --quick .. This command allowed me to generate the libraries which were missing.

And now everything works fine!
ouflak
  • 2,458
  • 10
  • 44
  • 49