How to Include OpenSSL in a Qt project
Solution 1
Assuming Windows, you can download its installation from Win32 OpenSSL Installation Project page. You can choose one for 64-bit windows developing or for 32-bit. Just run the setup and everything will be done easily. The default installation directory is : C:\OpenSSL-Win32
In Qt creator, if you then want to link a library to your project you can just add this line to your .pro file(project file ) :
LIBS += -L/path/to -llibname
So here's what we do for this library( for example to link ubsec.lib )
LIBS += -LC:/OpenSSL-Win32/lib -lubsec
Pay attention to -L and -l.See this question. You don't even need to specify .lib at the end of the library name.
For including .h files add this line to your .pro file :
INCLUDEPATH += C:/OpenSSL-Win32/include
after that you can include a file like this :
#include <openssl/aes.h>
Solution 2
From George at Unable to use AES files of OpenSSL in Qt Creator:
If this is on Linux, add the following into your .pro file:
PKGCONFIG += openssl
It will handle all necessary header paths, compile-linker options and the libraries.
And make sure you have the openssl-devel package installed in your system.
Solution 3
I was working on Win 7 (32) with Qt5.5, and non of these answers worked for me.
So I just want to share a solution that finally worked:
1. I have OpenSSL installed in C:\OpenSSL-Win32
2. In c:\OpenSSL-Win32\MinGW there are two library files:
libeay32.a & ssleay32.a
3. I've made a copy of each of them an renamed the extensions:
libeay32.a -> libeay32.lib & ssleay32.a -> ssleay32.lib
4. I linked libraries in my .pro file this way:
LIBS += -LC:/OpenSSL-Win32/lib/MinGW -llibeay32
LIBS += -LC:/OpenSSL-Win32/lib/MinGW -lssleay32
INCLUDEPATH += C:/OpenSSL-Win32/include
5. I copied 3 .dll files from C:\OpenSSL-Win32:
(libeay32.dll, libssl32.dll, ssleay32.dll)
to my build/debug folder:
(build-XXXXX-Desktop_Qt_5_5_1_MSVC2012_32bit-Debug/debug)
I hope this will help.
Solution 4
If you use cmake
as build system for your project, then you may include FindOpenSSL.cmake
as follows:
#set(OPENSSL_USE_STATIC_LIBS TRUE) # if you want to use static libssl.a and libcrypto.a
include(FindOpenSSL)
#add_executable(${PROJECT_NAME} ...) or add_library(${PROJECT_NAME} ...)
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS} OpenSSL::SSL OpenSSL::Crypto)
${CMAKE_DL_LIBS}
is required on Linux systems to avoid link-time errors like "dlopen symbol not found...". On windows it became empty.
If openssl
installation directory is not being standard, then you should provide OPENSSL_ROOT_DIR
to cmake
, e.g. to add set(OPENSSL_ROOT_DIR "C:/msys64/mingw32")
before include
or to specify -DOPENSSL_ROOT_DIR:PATH=C:/msys64/mingw32
to cmake
executable (in "Projects"->"Build settings"->"CMake" tab).
Related videos on Youtube
Mitch
Updated on July 09, 2022Comments
-
Mitch almost 2 years
I'm new to Qt, I've done some Googleing and can't find a detailed enough answer.
I need to use OpenSSL in my qmake-based Qt project. How do I go about downloading/installing/linking it so I can just do an include statement and use its functions in my code?
-
s4eed over 11 yearswhich Operating system?
-
Joseph Astrahan almost 10 yearsAnyone know how to do this for mac instead?
-
-
Mitch over 11 yearsThanks a lot. That's the type of answer I've been looking for.
-
K.Nicholas about 8 yearsIt looks like a good answer, but can you be a little more clear please. Tx.
-
loc over 7 yearssorry, long time since last login. you can first follow this stackoverflow.com/a/14681524/6193558 then changed the name of the two files :libeay32.a ssleay32.a. I solved this problem while refer other's solution. hope can help you.
-
jww about 7 yearsWhat is
ubsec.lib
, and what does it have to do with linking OpenSSL? -
s4eed about 7 years@jww Just an example.
-
FourtyTwo over 6 yearsThe setup of the "OpenSSL installation project" defaults to adding the dll's to system directories, and this way the correct dll's are also found, but only if this option was checked during setup. Otherwise there will likely be a dll from somewhere on the build system which is loaded by accident. I suggest to add deployment of the dll's to the build output directory additional to these steps, in order to avoid such issues.
-
FourtyTwo over 6 yearsThere's an interesting phrase under "donations": Businesses integrating Win32 OpenSSL into products must pay a minimum of $225 to help cover the cost of bandwidth.
-
Imre over 5 yearsI'm pretty sure this isn't the best solution possible. QT is all about portability. Now hardwiring a directory path into the source (e.g. the .pro file) isn't portable at all.
-
s4eed over 5 years@Imre Yeah for sure. If you want to be portable in .pro file too, you have to write inclusion of library conditionally based on the current operating system.
-
Imre over 5 years@s4eed also you can't expect EVERYBODY using the same OS to have openssl installed into the same directory (at least not on windows for instance)
-
s4eed over 5 years@Imre, Yeah for sure :D, It's just the imperfect solution to show the way to solve the problem to the questioner, with the least complexity. But thanks man for your advice.