Skip to content

Compile Qt 64 bit with OpenSSL on MacOs

Christian edited this page Jun 4, 2018 · 4 revisions

This is how we compile Qt and OpenSSL from source.

Version Compability.

In it's jump to OpenSSL 1.1.0, there were a lot of changes to OpenSSL which are not compatible to Qt below 5.9 (at time of writing this, support for OpenSSL 1.1.0 was discussed for the future version Qt 5.9). So if you compile Qt 5.8 or lower, get an OpenSSL version 1.0.x.

OpenSSL

First, we compile openSSL. Get the latest (not pre-) version from https://www.openssl.org/source/ (or install git and check out the lastest version). Next we will untar the sources, and build openSSL.

tar xvfz openSSL-sources.xxxx.tar.gz
cd openSSL-xxxx
mkdir dist
./Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared darwin64-x86_64-cc
make depend && make && make install

OpenSSL is now compiled and installed in the previously created dist/ folder. We will now use this to compile Qt.

Build Qt

You can obtain the Qt sources from the Qt homepage using the quick installer. Configure Qt using the following command. Of course you might have to modify the path to openSSL.

./configure -release -opensource -openssl -I /Users/peter/Downloads/openssl-1.1.0h/dist/include/ -L /Users/peter/Downloads/openssl-1.1.0h/dist/lib/ -nomake examples -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtlocation -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols2 -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtxmlpatterns

Run make to build the whole thing. Get a coffee ... or 2.

Macdeployqt

When macdeployqt is not working as expected you might have to change the rpath. The rpath defines where the executable looks for libraries. Unfortunately, this is set at compile time and can not be influenced from the outside at runtime. With a custom compile of Qt these can be set wrong. You can change the defined rpath. otool -L <file> shows the currently set paths and install_name_tool -rpath <old-path> <new-path> <file> can change the path in the executable. Instead of using an rpath, which is absolut, you can also use a @executable_path which is relative to the executable being called.