Building Qt with OpenSSL on Ubuntu 16.04.1 fails - qt

I have almost spent a week trying to build Qt5.8.0 with OpenSSL on Ubuntu 16.04.1 x64.
First of all I downloaded sources of OpenSSL v1.0.2k. Then I configured it with command
./Configure --prefix=$PWD/dist -shared linux-x86_64
Then I run theese commands one by one:
make depend
make
make install
So I got Openssl installed in /home/user/openssl-OpenSSL_1.0.2k/dist
Then I downloaded Qt from official website, and installed it with sources, so the sources are situated in /home/user/Qt5.8.0/5.8/Src
Then I tried to configure it with command
OPENSSL_LIBS='-L/home/user/openssl-OpenSSL_1_0_2k/dist/lib -lssl -lcrypto' ./configure -prefix /home/user/qt5_static -opensource -confirm-license -release -nomake examples -nomake tests -static -openssl-linked -I /home/user/openssl-OpenSSL_1_0_2k/dist/include/openssl -L /home/user/openssl-OpenSSL_1_0_2k/dist/lib
But got theese errors:
ERROR: Feature 'openssl' was enabled, but the pre-condition '!features.securetransport && tests.openssl' failed.
ERROR: Feature 'openssl-linked' was enabled, but the pre-condition
'features.openssl && libs.openssl' failed.
What am I doing wrong, and how to fix this issue?
Thank you in advance, and sorry for my bad english.

I had same problem when trying to link openSSL statically and found following solution:
1) Install openSSL
sudo apt-get update && sudo apt-get install libssl-dev
2) Configure and build qt from sources, including -openssl-linked option, my example configuration:
/home/someuser/Qt/5.8/Src/configure -c++std c++11 -static -release -platform linux-g++-64 -prefix /home/someuser/Qt/StaticRelease58 -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -qt-xcb -make libs -openssl-linked -nomake tools -nomake examples -nomake tests -opensource -confirm-license -skip qtwayland -skip qtwebview -skip qtwebengine -skip qtwebchannel -no-qml-debug
Note that to build QT statically, you also must have installed other packages described here:
http://doc.qt.io/qt-5/linux-requirements.html
http://doc.qt.io/qt-5/linux-deployment.html
P.S. Linking dynamically to openSSL from QT5.8 works fine for me with default setup.

Related

Ubuntu Cross-Compiling QT for Raspberry Pi | ERROR: Unknown command line option 'skip'

I am fairly very new to Ubuntu/Linux and am currently running into an issue with getting an ERROR: Unknown command not found. I am trying configure Qt for cross compilation for a raspberry pi. I have looked up for similar issues but to no avail unfortunately.
The code I am running is as follows
./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v -qpa eglfs -no-xcb -system-freetype -skip qtwebengine -nomake examples -nomake tools -fontconfig
I need to skip a few things in it but when I run this I get this line
ERROR: Unknown command line option '-skip'.
For some extra info, this is my location when doing so as follows when typing in pwd
/home/usr/raspi/qt-everywhere-src-5.11.3/qtbase
Configure is not recognizing the skip option, because you are running it from qtbase folder. Try to tun configure from the top qt folder.

Can't qmake QtWebengine - "qtwebenginecore-config.pri: No such file or directory"

I built qt whit this configuration:
configure -v -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=/home/doxa/raspi/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -opensource -confirm-license -sysroot /home/doxa/raspi/sysroot -make libs -nomake tests -nomake tools -nomake examples -skip qt3d -skip qtgamepad -skip qtlocation -skip qtsensors -skip qtwayland -skip qtdeclarative -prefix /usr/local/doxas_5.12.4 -extprefix /usr/local/doxas_5.12.4 -hostprefix /usr/local/doxas_5.12.4 -qpa xcb -no-use-gold-linker
Everything done well but, QtWebengine didn't configure.
Now I want to build and install this module(I did with Qt 5.7), but qmake returns an error:
doxa#K43SD:/media/doxa/MCBK/rpi_build/websss$ /media/doxa/MCBK/rpi_build/qtbase/bin/qmake /usr/local/Qt5.12.4/5.12.4/Src/qtwebengine/
Info: creating cache file /media/doxa/MCBK/rpi_build/websss/.qmake.cache
Cannot read /media/doxa/MCBK/rpi_build/websss/src/core/qtwebenginecore-config.pri: No such file or directory
Project ERROR: Could not find feature webengine-v8-snapshot-support.
doxa#K43SD:/media/doxa/MCBK/rpi_build/websss$
the *-config.pri is not available in the source of any module and it has to build during the module build process. I don't know how to generate this file. which tools of Qt should I use?
Qt: 5.12.4
Host: Ubuntu 18.04_x64
Thanks in advance
I Just found where is the problem.
I should use the out of source qmake, where it is installed.
Qt forum
mkdir build_qtwebengine
cd buid_qtwebengine
/path/to/your/cross_compiled_Qt/bin/qmake /path/to/qtwebengine

QT 5.5.1 removed -universal option: no way of creating universal binaries on MAC

Why is -universal option removed from ./configure script?
How do i create universal binary from source?
I am able to create 32-bit and 64-bit frameworks separately as follows:
1) 64-bit QT framework
#Choose platform from qtbase/mkspecs/
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang
#Only needed QTcore, QTNetwork, QTGui module, so i choose "module-qtbase"
make -j4 module-qtbase
Copy qtbase/lib/ somewhere before creating 32-bit
2) 32-bit QT framework
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang-32
make -j4 module-qtbase
Now its cumbersome to use lipo on 32bit qtbase\lib and 64bit qtbase\lib. Is there any new way of creating universal binaries on MAC?
I still need to support 32bit.
I had to write this manually as following.
If anyone else comes up with better answer i'll accept theirs.
#This is in qt-everywhere/src/ directory
#Build for 32-bit
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang-32
make
#Backup required 32-bit binaries. I only needed qtbase and plugins
#-R because frameworks contain symlinks
cp -Rf qtbase/lib ../out_32/lib
cp -Rf qtbase/plugins ../out_32/plugins
make clean
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang
make
#Backup required 64-bit binaries.
cp -Rf qtbase/lib ../out_64/lib
cp -Rf qtbase/plugins ../out_64/plugins
cd ..
#creating universal frameworks
FR="QtGui QtCore QtNetwork QtWidgets"
for fr in ${FR}; do
rm -rf out/$fr.framework
cp -Rf out_64/lib/$fr.framework out/
rm -rf out/$fr.framework/Versions/Current/$fr
lipo -create -output out/$fr.framework/Versions/Current/$fr \
out_32/lib/$fr.framework/Versions/Current/$fr \
out_64/lib/$fr.framework/Versions/Current/$fr
done
out directory contains universal frameworks.

How to build qtwebengine from Qt 5.5 git source

I have followed the instructions on this page Building Qt 5 from Git to build Qt 5.5 from source. The source is in "~/qt5_source_built/qt5" and the Qt 5.5 built system is in "~/qt5_source_built/qt5.5-build". I have used the following config options :
~/qt5_source_built/qt5/configure -developer-build -opensource -no-gtkstyle -nomake examples -nomake tests
and then used "make -j4" to build the qt-5.5 system. The system builds OK.
I use CMake to develop applications for the Qt 5.5 built system. It works for the usual cases (e.g. could use qtwebkit). However, when I want to test the qtwebengine module on a new application, I find that there seems NO qtwebengine include files and library files under the "~/qt5_source_built/qt5.5-build/qtbase" directory.
I have tried to re-make the system using different targets :
make all -j4
make module-qtwebengine -j4
make module-qtwebengine-all -j4
but the console keeps outputing
... Nothing to be done for ...
and the qtwebengine include and library files still could NOT be found under the "~/qt5_source_built/qt5.5-build/qtbase" directory after the re-make.
I notice that the qtwebengine source files seems could be found in "~/qt5_source_built/qt5/qtwebengine/src" but I just could not build it using the "make" command.
Have I just missed the qtwebengine include and library files under the built directory ? If not, does anyone know how could I build qtwebengine using this Qt 5.5 git source ?
Thanks for any suggestion.
The following ended up working. I installed all of these prereqs. If they were missing, QtWebEngine wouldn't build. make module-qtwebengine usually printed out the reason it didn't build it:
sudo apt-get install bison build-essential flex gperf gyp \
libasound2-dev libbz2-dev libcap-dev libcups2-dev libdrm-dev \
libegl1-mesa-dev libfontconfig1-dev libgcrypt11-dev \
libglu1-mesa-dev libicu-dev libnss3-dev libpci-dev libpulse-dev \
libssl-dev libudev-dev libxcomposite-dev libxcursor-dev \
libxdamage-dev libxrandr-dev libxtst-dev ninja python ruby
Then I used the following configuration. Not sure if this is minimal but it worked:
./configure -release -opensource -confirm-license -shared \
-no-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype\
-icu -openssl -qt-xcb -opengl -gui -widgets -skip webkit \
-nomake examples
Note that I skipped webkit, and also I use -shared instead of -static since static linking of QtWebEngine is apparently not yet supported.

Error compiling Qt5 with openssl linked

My head will explode soon... I want to compile qt with -openssl-linked so the openssl libraries get linked into the qt libraries. I already tried many options and my output when compiling is always:
ssl/qsslcertificate_openssl.cpp: In function ‘uint qHash(const QSslCertificate&, uint)’:
ssl/qsslcertificate_openssl.cpp:63:30: error: invalid use of incomplete type ‘X509 {aka struct x509_st}’
return qHashBits(x509->sha1_hash, SHA_DIGEST_LENGTH, seed);
^
In file included from /usr/local/include/openssl/crypto.h:131:0,
from /usr/local/include/openssl/comp.h:59,
from /usr/local/include/openssl/ssl.h:148,
from ../../include/QtNetwork/5.5.1/QtNetwork/private/../../../../../src/network/ssl/qsslcontext_openssl_p.h:53,
from ../../include/QtNetwork/5.5.1/QtNetwork/private/qsslcontext_openssl_p.h:1,
from ssl/qsslsocket_p.h:55,
from ssl/qsslsocket_openssl_p.h:63,
from ssl/qsslsocket_openssl_symbols_p.h:64,
from ssl/qsslcertificate_openssl.cpp:35:
/usr/local/include/openssl/ossl_typ.h:160:16: note: forward declaration of ‘X509 {aka struct x509_st}’
typedef struct x509_st X509;
I compiled openssl and tried compiling qt passing my compiled libraries:
OPENSSL_LIBS='-L/opt/openssl_build/lib -lssl -lcrypto' ./configure -prefix /opt/qt5.5.1_linux_staticssl -opensource -confirm-license -release -nomake examples -nomake tests -static -openssl -no-opengl -no-libpng -no-pulseaudio -no-linuxfb -no-gif -no-gstreamer -no-gtkstyle -no-directfb -no-gui -no-eglfs -no-glib -I /opt/openssl_build/include/openssl -L /opt/openssl_build/lib -no-xcb
I know the error seems to be loading the old openssl libraries but I already tried changing that path so it can't find them and force it to load the new ones.
I don't know what else to do. The Qt version is 5.5.1 openssl 1.0.1 and g++ 5.2.
I had to build Qt with the openssl version 1.0.1, don't know if it work with the 1.0.2. I had to change the path of the system's openssl libraries so that Qt was forced to use the ones I made.
Lines to compile openssl running at the source's directory:
./config --prefix=/opt/openssl_build_stable -shared
make
make test
sudo make install
My conf line for Qt:
OPENSSL_LIBS='-L/opt/openssl_build_stable/lib -lssl -lcrypto' ./configure -prefix /opt/qt5.5.1_linux_staticssl -opensource -confirm-license -release -nomake examples -nomake tests -static -openssl-linked -I /opt/openssl_build_stable/include/openssl -L /opt/openssl_build_stable/lib
Thanks to simon-warta
Try ./configure -no-openssl
to bypass openssl altogether, in case you don't need your paraView to talk to another machine.

Resources