I just mastered the challenge of compiling a statically linked version of Qt 5 with MinGW including OpenSSL support (for HTTPS) on Windows. As it took some days (!) to figure out the correct way of doing this, let me share it with you.

First, you will have to either install MinGW or use the provided MinGW installation that comes with the normal Qt packages. I took the easy path and used the dynamically linked Qt packages as I had it installed anyway.

Then, download the great PowerShell helper script from https://sourceforge.net/p/qtlmovie/code/ci/master/tree/build/windows-build-qt-static.ps1 - it will perform all the necessary steps for you, including downloading the Qt sources, unpacking them, configuring Qt, building and installing it.

After that, download a prebuilt version of OpenSSL from https://slproweb.com/products/Win32OpenSSL.html. The "light" version will NOT be sufficient as it is missing the header files. Install it to C:\OpenSSL-Win32 (ymmv if you are building for 64 bits, of course).

Next - and this is what drove me nearly mad - you will have to edit the build script windows-build-qt-static.ps1. Find the line reading # Configure, compile and install Qt. and edit the configure command below. First, remove the -no-openssl argument. Then, add the following part:

-openssl-linked OPENSSL_LIBS=`"-lssleay32 -llibeay32 -lgdi32 -lUser32`" -L C:\OpenSSL-Win32 -L C:\OpenSSL-Win32\lib -L C:\OpenSSL-Win32\lib\MinGW -I C:\OpenSSL-Win32\include

Note the backticks before the quotes after OPENSSL_LIBS - this is an escape character for the PowerShell. Furthermore, to speed up the Qt build, you can disable modules that are not required for the software that you want to compile. For example, my configure call looks like this:

configure.bat -static -release -platform win32-g++ -prefix $QtDir -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -openssl-linked -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests OPENSSL_LIBS=`"-lssleay32 -llibeay32 -lgdi32 -lUser32`" -L C:\OpenSSL-Win32 -L C:\OpenSSL-Win32\lib -L C:\OpenSSL-Win32\lib\MinGW -I C:\OpenSSL-Win32\include -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdoc -skip qtenginio -skip qtgraphicaleffects -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtscript -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtx11extras -skip qtxmlpatterns

In the line below the configure command, you also might want to increase the make jobs that are used to build Qt. By default, four build jobs are used but if you have got more CPU cores, you might want to increase it.

Before building, it might be useful to disable you AntiVirus software. The one I used at that time (360 Internet Security) slowed down the build by about factor eight. But beware the risks of course - meaning that you should not surf the Internet during this time and don't start any software (except the Qt build of course).

At last, start the build script and some hours later (mostly depending on your machine and the disabled Qt modules), you will find a fresh statically linked version of Qt 5 including OpenSSL in C:\Qt\Static.

To deploy software build with this version of Qt, you will have to deploy some files from C:\OpenSSL-Win32 with your software:

  • libeay32.dll
  • libssl32.dll
  • ssleay32.dll

This is, of course, a little more overhead than just deploying the executable. On the other hand, you are now able to update the deployed OpenSSL version without a rebuild.

Happy developing!

Ich setze bei fast allen Website-Projekten auf Joomla als Content-Management-System (CMS). In aktuellen Versionen (seit Version 3.0) ist Joomla sehr komfortabel zu benutzen und zudem technisch äußerst ausgereift. Es gibt eine große Fülle an Erweiterungen und die Möglichkeiten für Suchmaschinen-Optimierung (SEO) sind (teilweise mit Erweiterungen) sehr zahlreich geworden.

Eine Standardinstallation von Joomla ist in der Regel jedoch nicht auf Geschwindigkeit optimiert. Schaut man sich beispielsweise bei Google PageSpeed Insight mal die Leistung der Seite joomla.org an, ist das Ergebnis erschreckend (siehe https://developers.google.com/speed/pagespeed/insights/?url=www.joomla.org). Hat man seine Joomla-Seite jedoch auf Geschwindigkeit optimiert (so wie ich es getan habe), so sieht das Ganze gleich anders aus (siehe https://developers.google.com/speed/pagespeed/insights/?url=www.thomssen-it.de).

Diese Optimierungen waren jedoch zugegebenermaßen kaum mit manueller Arbeit verbunden. Ich musste dafür nichts programmieren, sondern nur die richtigen Erweiterungen installieren und diese korrekt konfigurieren. In diesem Beitrag werde ich beschreiben, wie ich hierfür vorgegangen bin (eingesetzte Joomla-Version: 3.3.1).

Es klingt zunächst einfach, Grafiken und Bilder auf Websites zu stellen, dass diese korrekt angezeigt werden. Man lädt ein Bild hoch und verknüpft es auf einer HTML-Seite. Nun wird es dort genau mit den Abmessungen angezeigt, in denen es gespeichert ist.

In der Regel möchte man jedoch ein Bild kleiner angezeigt bekommen als beispielsweise eine Kamera dieses Bild erstellt hat. Hat eine Kamera beispielsweise ein Foto mit der Auflösung 4128x2322 und einer Größe von 4 MB erstellt, würde dieses Bild auf keinen Monitor passen. Die erste Möglichkeit hierfür ist, dem entsprechenden Bild-Tag direkt Informationen zur darzustellenden Bildgröße mitzugeben:

<a href="bildname.jpg" style="width: 400px; height: 225px;" />

So wird das Bild mit einer Breite von 400 Pixeln und einer Höhe von 225 Pixeln dargestellt. Allerdings muss der Betrachter der Seite dennoch das gesamte 4 MB große Bild herunterladen, obwohl er es viel kleiner angezeigt bekommen soll. Daher lohnt es sich (und das findet auch Google), das Bild zuvor zu verkleinern.

Zum Seitenanfang