I want to use a static build of Qt 5.4. Since there is no precompiled static build available, you have to build one from the Qt source code yourself.
My environment is the following:
My procedure was the following (cf. Qt Documentation > Qt 5.4 > Qt for Windows - Building from Source):
Run configure with the following command
configure -c++11 -mp -release -static -nomake tests -nomake examples -prefix D:\Qt\qt-5.4.0-x86-msvc2013-compact-static -platform win32-msvc2013 -opengl desktop -no-icu -skip webkit
Run nmake
and nmake install
All this run through without errors.
Then in Visual Studio, I changed the Qt version of an existing Qt project to D:\Qt\qt-5.4.0-x86-msvc2013-compact-static
as this was the output folder of the above procedure.
However, now I get tons of unresolved symbol errors of the following kind (build configuration "release"):
error LNK2001: unresolved external symbol "__imp__glBindTexture@8". Qt5Gui.lib(qopenglfunctions.obj)
...
error LNK2001: unresolved external symbol "_hb_blob_create". Qt5Gui.lib(qharfbuzzng.obj)
...
error LNK2001: unresolved external symbol "_hb_face_create_for_tables". Qt5Gui.lib(qharfbuzzng.obj)
....
error LNK2001: unresolved external symbol "_WSAAsyncSelect@16". Qt5Core.lib(qeventdispatcher_win.obj)
A shared library / dynamic linking build with similar options (-platform win32-msvc2013 -opengl desktop -no-icu -skip webkit
) works just fine.
What am I doing wrong?
Update Jan 6th:
1) As already mentioned in the comments, this may be a bug in Qt, so I created a bug report (QTBUG-43636), and later I found a probably related bug (QTBUG-38913). (Sorry, I can post no more than 2 links)
2) I found out (thanks to karlphillip) that you can reduce the number of error messages if you add some libraries to your additional dependencies in Visual Studio
Ws2_32.lib
resolves one error message (out of 103)opengl32.lib
resolves 47 error messagesThis means there are now "only" 55 error messages left. Maybe there are still more libraries missing?
I found the solution:
You have to add the following libraries to your additional dependencies in Visual Studio:
Ws2_32.lib
opengl32.lib
qtharfbuzzng.lib
Then, my project finally compiled.
However, that is not the end of the story:
Although successfully compiled, my application showed the following error message on startup:
This application failed to start because it could not find or load the Qt platform plugin "windows".
To solve this, you have to add even more libraries to your additional dependencies:
imm32.lib
winmm.lib
Qt5PlatformSupport.lib
qwindows.lib
...and the following to your additional library directories:
$(QTDIR)\plugins\platforms
...and the following to your source code:
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Done! Finally, I was able to link against static Qt libraries.
It was worth the effort:
The cold startup time of my application improved dramatically from about 10 seconds to less than 1 second. And instead of 14 MB DLL-files I only have to deploy a single 8 MB EXE-file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With