Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Static build of Qt 5.15.8 with static OpenSSL

Static build of Qt 5.15.8 with static OpenSSL

Scheduled Pinned Locked Moved Unsolved General and Desktop
configurebuildsystemopensslstatic build qt
10 Posts 2 Posters 1.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Q Offline
    Q Offline
    quutee
    wrote on 25 Feb 2023, 18:08 last edited by quutee
    #1

    I have compiled a static build of Qt 5.15.8 from the source on macOS 12 (Xcode 13) with the following option passed to the configure command to enable OpenSSL

    ../configure .... -static -release -prefix <install_dir> -openssl-linked OPENSSL_PREFIX="$OPENSSL_DIR" OPENSSL_LIBS="$OPENSSL_DIR/lib/libssl.a $OPENSSL_DIR/lib/libcrypto.a" ...
    

    The generated build (the contents of <install_dir> works fine on the machine on which it was built but gives linking errors when moved to a different machine, and setup as a kit in Qt Creator, as it still tries to find the openssl libs in OPENSSL_DIR and the expects libssl.a and libcrpyto.a to be present at $OPENSSL_DIR/lib which fails as these are build machine paths. It seems the build system hardcodes the value of these variables inside lib/pkgconfig/*.pc and lib/*.pri files.

    What is the correct way to build Qt static libs with openssl static so that it can be moved to a different machine and setup as a kit in Qt Creator?

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 25 Feb 2023, 20:04 last edited by
      #2

      Hi and welcome to devnet,

      Out of curiosity, since Qt usually uses the cryptographic framework from Apple, why do you need OpenSSL ?

      That said, do you have both OpenSSL's static and dynamic libraires in the same folder ? If so, try to move them in a different folder.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      Q 1 Reply Last reply 26 Feb 2023, 13:56
      0
      • S SGaist
        25 Feb 2023, 20:04

        Hi and welcome to devnet,

        Out of curiosity, since Qt usually uses the cryptographic framework from Apple, why do you need OpenSSL ?

        That said, do you have both OpenSSL's static and dynamic libraires in the same folder ? If so, try to move them in a different folder.

        Q Offline
        Q Offline
        quutee
        wrote on 26 Feb 2023, 13:56 last edited by quutee
        #3

        @SGaist Thanks!

        It's actually a requirement from the client to use openssl on all platforms.

        Yes, I do have both static and shared libraries in the same directory. If I remove the shared libs from the directory and keep the OPENSSL_LIBS="$OPENSSL_DIR/lib/libssl.a $OPENSSL_DIR/lib/libcrypto.a" in the configure command, I get the same issue.

        If I remove the OPENSSL_LIBS option from the configure command, then it adds -lssl and lcrypto and -L<build_machine_path> in the link command and I get a similar error.

        Ideally I think, it should not add these libraries/paths implicity with hardcoded paths and throw a missing symbols linking error.

        S 1 Reply Last reply 26 Feb 2023, 19:55
        0
        • Q quutee
          26 Feb 2023, 13:56

          @SGaist Thanks!

          It's actually a requirement from the client to use openssl on all platforms.

          Yes, I do have both static and shared libraries in the same directory. If I remove the shared libs from the directory and keep the OPENSSL_LIBS="$OPENSSL_DIR/lib/libssl.a $OPENSSL_DIR/lib/libcrypto.a" in the configure command, I get the same issue.

          If I remove the OPENSSL_LIBS option from the configure command, then it adds -lssl and lcrypto and -L<build_machine_path> in the link command and I get a similar error.

          Ideally I think, it should not add these libraries/paths implicity with hardcoded paths and throw a missing symbols linking error.

          S Offline
          S Offline
          SGaist
          Lifetime Qt Champion
          wrote on 26 Feb 2023, 19:55 last edited by
          #4

          Strange...

          What values do you get if you use otool to check the dependencies of the network library ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          Q 1 Reply Last reply 27 Feb 2023, 16:50
          0
          • S SGaist
            26 Feb 2023, 19:55

            Strange...

            What values do you get if you use otool to check the dependencies of the network library ?

            Q Offline
            Q Offline
            quutee
            wrote on 27 Feb 2023, 16:50 last edited by
            #5

            @SGaist Following is the output of the otool command.

            % otool -L libQt5Network.a
            Archive : libQt5Network.a
            libQt5Network.a(qnetworkaccessauthenticationmanager.o):
            libQt5Network.a(qnetworkaccessmanager.o):
            libQt5Network.a(qnetworkaccesscache.o):
            libQt5Network.a(qnetworkaccessbackend.o):
            libQt5Network.a(qnetworkaccessdebugpipebackend.o):
            libQt5Network.a(qnetworkaccessfilebackend.o):
            libQt5Network.a(qnetworkaccesscachebackend.o):
            libQt5Network.a(qnetworkcookie.o):
            libQt5Network.a(qnetworkcookiejar.o):
            libQt5Network.a(qnetworkrequest.o):
            libQt5Network.a(qnetworkreply.o):
            libQt5Network.a(qnetworkreplyimpl.o):
            libQt5Network.a(qnetworkreplydataimpl.o):
            libQt5Network.a(qnetworkreplyfileimpl.o):
            libQt5Network.a(qabstractnetworkcache.o):
            libQt5Network.a(qnetworkfile.o):
            libQt5Network.a(qhsts.o):
            libQt5Network.a(qhstspolicy.o):
            libQt5Network.a(qftp.o):
            libQt5Network.a(qnetworkaccessftpbackend.o):
            libQt5Network.a(qnetworkdiskcache.o):
            libQt5Network.a(qhstsstore.o):
            libQt5Network.a(bitstreams.o):
            libQt5Network.a(huffman.o):
            libQt5Network.a(hpack.o):
            libQt5Network.a(hpacktable.o):
            libQt5Network.a(http2frames.o):
            libQt5Network.a(http2streams.o):
            libQt5Network.a(http2protocol.o):
            libQt5Network.a(qabstractprotocolhandler.o):
            libQt5Network.a(qhttp2protocolhandler.o):
            libQt5Network.a(qhttpmultipart.o):
            libQt5Network.a(qhttpnetworkconnection.o):
            libQt5Network.a(qhttpnetworkconnectionchannel.o):
            libQt5Network.a(qhttpnetworkheader.o):
            libQt5Network.a(qhttpnetworkreply.o):
            libQt5Network.a(qhttpnetworkrequest.o):
            libQt5Network.a(qhttpprotocolhandler.o):
            libQt5Network.a(qhttpthreaddelegate.o):
            libQt5Network.a(qnetworkreplyhttpimpl.o):
            libQt5Network.a(qhttp2configuration.o):
            libQt5Network.a(qspdyprotocolhandler.o):
            libQt5Network.a(qnetworksession.o):
            libQt5Network.a(qnetworkconfigmanager.o):
            libQt5Network.a(qnetworkconfiguration.o):
            libQt5Network.a(qnetworkconfigmanager_p.o):
            libQt5Network.a(qbearerengine.o):
            libQt5Network.a(qbearerplugin.o):
            libQt5Network.a(qsharednetworksession.o):
            libQt5Network.a(qauthenticator.o):
            libQt5Network.a(qhostaddress.o):
            libQt5Network.a(qhostinfo.o):
            libQt5Network.a(qnetworkdatagram.o):
            libQt5Network.a(qnetworkinterface.o):
            libQt5Network.a(qnetworkproxy.o):
            libQt5Network.a(qurlinfo.o):
            libQt5Network.a(qdnslookup.o):
            libQt5Network.a(qdnslookup_unix.o):
            libQt5Network.a(qhostinfo_unix.o):
            libQt5Network.a(qnetworkinterface_unix.o):
            libQt5Network.a(qnetworkproxy_mac.o):
            libQt5Network.a(qabstractsocketengine.o):
            libQt5Network.a(qabstractsocket.o):
            libQt5Network.a(qtcpsocket.o):
            libQt5Network.a(qudpsocket.o):
            libQt5Network.a(qtcpserver.o):
            libQt5Network.a(qsocks5socketengine.o):
            libQt5Network.a(qhttpsocketengine.o):
            libQt5Network.a(qnativesocketengine.o):
            libQt5Network.a(qnativesocketengine_unix.o):
            libQt5Network.a(qlocalsocket.o):
            libQt5Network.a(qlocalserver.o):
            libQt5Network.a(qlocalsocket_unix.o):
            libQt5Network.a(qlocalserver_unix.o):
            libQt5Network.a(qasn1element.o):
            libQt5Network.a(qssl.o):
            libQt5Network.a(qsslcertificate.o):
            libQt5Network.a(qsslcertificateextension.o):
            libQt5Network.a(qsslconfiguration.o):
            libQt5Network.a(qsslcipher.o):
            libQt5Network.a(qssldiffiehellmanparameters.o):
            libQt5Network.a(qsslellipticcurve.o):
            libQt5Network.a(qsslkey_p.o):
            libQt5Network.a(qsslerror.o):
            libQt5Network.a(qsslsocket.o):
            libQt5Network.a(qsslpresharedkeyauthenticator.o):
            libQt5Network.a(qocspresponse.o):
            libQt5Network.a(qdtls.o):
            libQt5Network.a(qsslsocket_openssl_symbols.o):
            libQt5Network.a(qssldiffiehellmanparameters_openssl.o):
            libQt5Network.a(qsslcertificate_openssl.o):
            libQt5Network.a(qsslellipticcurve_openssl.o):
            libQt5Network.a(qsslkey_openssl.o):
            libQt5Network.a(qsslsocket_openssl.o):
            libQt5Network.a(qsslcontext_openssl.o):
            libQt5Network.a(qdtls_openssl.o):
            libQt5Network.a(qsslsocket_mac_shared.o):
            libQt5Network.a(qpassworddigestor.o):
            libQt5Network.a(qnetconmonitor_darwin.o):
            libQt5Network.a(moc_qnetworkaccesscache_p.o):
            libQt5Network.a(moc_qnetworkaccessbackend_p.o):
            libQt5Network.a(moc_qnetworkaccessdebugpipebackend_p.o):
            libQt5Network.a(moc_qnetworkaccessfilebackend_p.o):
            libQt5Network.a(moc_qnetworkcookiejar.o):
            libQt5Network.a(moc_qnetworkreply.o):
            libQt5Network.a(moc_qabstractnetworkcache.o):
            libQt5Network.a(moc_qnetworkfile_p.o):
            libQt5Network.a(moc_qnetworkaccessftpbackend_p.o):
            libQt5Network.a(moc_qnetworkdiskcache.o):
            libQt5Network.a(moc_qhttp2protocolhandler_p.o):
            libQt5Network.a(moc_qhttpmultipart.o):
            libQt5Network.a(moc_qhttpnetworkreply_p.o):
            libQt5Network.a(moc_qhttpthreaddelegate_p.o):
            libQt5Network.a(moc_qnetworkreplyhttpimpl_p.o):
            libQt5Network.a(moc_qspdyprotocolhandler_p.o):
            libQt5Network.a(moc_qnetworkconfigmanager_p.o):
            libQt5Network.a(moc_qnetworksession_p.o):
            libQt5Network.a(moc_qbearerplugin_p.o):
            libQt5Network.a(moc_qhostinfo_p.o):
            libQt5Network.a(moc_qnetworkproxy.o):
            libQt5Network.a(moc_qnetconmonitor_p.o):
            libQt5Network.a(moc_qdnslookup_p.o):
            libQt5Network.a(moc_qabstractsocketengine_p.o):
            libQt5Network.a(moc_qtcpsocket.o):
            libQt5Network.a(moc_qudpsocket.o):
            libQt5Network.a(moc_qsocks5socketengine_p.o):
            libQt5Network.a(moc_qhttpsocketengine_p.o):
            libQt5Network.a(moc_qnativesocketengine_p.o):
            libQt5Network.a(moc_qsslerror.o):
            libQt5Network.a(moc_qdtls.o):
            
            S 1 Reply Last reply 27 Feb 2023, 20:34
            0
            • Q quutee
              27 Feb 2023, 16:50

              @SGaist Following is the output of the otool command.

              % otool -L libQt5Network.a
              Archive : libQt5Network.a
              libQt5Network.a(qnetworkaccessauthenticationmanager.o):
              libQt5Network.a(qnetworkaccessmanager.o):
              libQt5Network.a(qnetworkaccesscache.o):
              libQt5Network.a(qnetworkaccessbackend.o):
              libQt5Network.a(qnetworkaccessdebugpipebackend.o):
              libQt5Network.a(qnetworkaccessfilebackend.o):
              libQt5Network.a(qnetworkaccesscachebackend.o):
              libQt5Network.a(qnetworkcookie.o):
              libQt5Network.a(qnetworkcookiejar.o):
              libQt5Network.a(qnetworkrequest.o):
              libQt5Network.a(qnetworkreply.o):
              libQt5Network.a(qnetworkreplyimpl.o):
              libQt5Network.a(qnetworkreplydataimpl.o):
              libQt5Network.a(qnetworkreplyfileimpl.o):
              libQt5Network.a(qabstractnetworkcache.o):
              libQt5Network.a(qnetworkfile.o):
              libQt5Network.a(qhsts.o):
              libQt5Network.a(qhstspolicy.o):
              libQt5Network.a(qftp.o):
              libQt5Network.a(qnetworkaccessftpbackend.o):
              libQt5Network.a(qnetworkdiskcache.o):
              libQt5Network.a(qhstsstore.o):
              libQt5Network.a(bitstreams.o):
              libQt5Network.a(huffman.o):
              libQt5Network.a(hpack.o):
              libQt5Network.a(hpacktable.o):
              libQt5Network.a(http2frames.o):
              libQt5Network.a(http2streams.o):
              libQt5Network.a(http2protocol.o):
              libQt5Network.a(qabstractprotocolhandler.o):
              libQt5Network.a(qhttp2protocolhandler.o):
              libQt5Network.a(qhttpmultipart.o):
              libQt5Network.a(qhttpnetworkconnection.o):
              libQt5Network.a(qhttpnetworkconnectionchannel.o):
              libQt5Network.a(qhttpnetworkheader.o):
              libQt5Network.a(qhttpnetworkreply.o):
              libQt5Network.a(qhttpnetworkrequest.o):
              libQt5Network.a(qhttpprotocolhandler.o):
              libQt5Network.a(qhttpthreaddelegate.o):
              libQt5Network.a(qnetworkreplyhttpimpl.o):
              libQt5Network.a(qhttp2configuration.o):
              libQt5Network.a(qspdyprotocolhandler.o):
              libQt5Network.a(qnetworksession.o):
              libQt5Network.a(qnetworkconfigmanager.o):
              libQt5Network.a(qnetworkconfiguration.o):
              libQt5Network.a(qnetworkconfigmanager_p.o):
              libQt5Network.a(qbearerengine.o):
              libQt5Network.a(qbearerplugin.o):
              libQt5Network.a(qsharednetworksession.o):
              libQt5Network.a(qauthenticator.o):
              libQt5Network.a(qhostaddress.o):
              libQt5Network.a(qhostinfo.o):
              libQt5Network.a(qnetworkdatagram.o):
              libQt5Network.a(qnetworkinterface.o):
              libQt5Network.a(qnetworkproxy.o):
              libQt5Network.a(qurlinfo.o):
              libQt5Network.a(qdnslookup.o):
              libQt5Network.a(qdnslookup_unix.o):
              libQt5Network.a(qhostinfo_unix.o):
              libQt5Network.a(qnetworkinterface_unix.o):
              libQt5Network.a(qnetworkproxy_mac.o):
              libQt5Network.a(qabstractsocketengine.o):
              libQt5Network.a(qabstractsocket.o):
              libQt5Network.a(qtcpsocket.o):
              libQt5Network.a(qudpsocket.o):
              libQt5Network.a(qtcpserver.o):
              libQt5Network.a(qsocks5socketengine.o):
              libQt5Network.a(qhttpsocketengine.o):
              libQt5Network.a(qnativesocketengine.o):
              libQt5Network.a(qnativesocketengine_unix.o):
              libQt5Network.a(qlocalsocket.o):
              libQt5Network.a(qlocalserver.o):
              libQt5Network.a(qlocalsocket_unix.o):
              libQt5Network.a(qlocalserver_unix.o):
              libQt5Network.a(qasn1element.o):
              libQt5Network.a(qssl.o):
              libQt5Network.a(qsslcertificate.o):
              libQt5Network.a(qsslcertificateextension.o):
              libQt5Network.a(qsslconfiguration.o):
              libQt5Network.a(qsslcipher.o):
              libQt5Network.a(qssldiffiehellmanparameters.o):
              libQt5Network.a(qsslellipticcurve.o):
              libQt5Network.a(qsslkey_p.o):
              libQt5Network.a(qsslerror.o):
              libQt5Network.a(qsslsocket.o):
              libQt5Network.a(qsslpresharedkeyauthenticator.o):
              libQt5Network.a(qocspresponse.o):
              libQt5Network.a(qdtls.o):
              libQt5Network.a(qsslsocket_openssl_symbols.o):
              libQt5Network.a(qssldiffiehellmanparameters_openssl.o):
              libQt5Network.a(qsslcertificate_openssl.o):
              libQt5Network.a(qsslellipticcurve_openssl.o):
              libQt5Network.a(qsslkey_openssl.o):
              libQt5Network.a(qsslsocket_openssl.o):
              libQt5Network.a(qsslcontext_openssl.o):
              libQt5Network.a(qdtls_openssl.o):
              libQt5Network.a(qsslsocket_mac_shared.o):
              libQt5Network.a(qpassworddigestor.o):
              libQt5Network.a(qnetconmonitor_darwin.o):
              libQt5Network.a(moc_qnetworkaccesscache_p.o):
              libQt5Network.a(moc_qnetworkaccessbackend_p.o):
              libQt5Network.a(moc_qnetworkaccessdebugpipebackend_p.o):
              libQt5Network.a(moc_qnetworkaccessfilebackend_p.o):
              libQt5Network.a(moc_qnetworkcookiejar.o):
              libQt5Network.a(moc_qnetworkreply.o):
              libQt5Network.a(moc_qabstractnetworkcache.o):
              libQt5Network.a(moc_qnetworkfile_p.o):
              libQt5Network.a(moc_qnetworkaccessftpbackend_p.o):
              libQt5Network.a(moc_qnetworkdiskcache.o):
              libQt5Network.a(moc_qhttp2protocolhandler_p.o):
              libQt5Network.a(moc_qhttpmultipart.o):
              libQt5Network.a(moc_qhttpnetworkreply_p.o):
              libQt5Network.a(moc_qhttpthreaddelegate_p.o):
              libQt5Network.a(moc_qnetworkreplyhttpimpl_p.o):
              libQt5Network.a(moc_qspdyprotocolhandler_p.o):
              libQt5Network.a(moc_qnetworkconfigmanager_p.o):
              libQt5Network.a(moc_qnetworksession_p.o):
              libQt5Network.a(moc_qbearerplugin_p.o):
              libQt5Network.a(moc_qhostinfo_p.o):
              libQt5Network.a(moc_qnetworkproxy.o):
              libQt5Network.a(moc_qnetconmonitor_p.o):
              libQt5Network.a(moc_qdnslookup_p.o):
              libQt5Network.a(moc_qabstractsocketengine_p.o):
              libQt5Network.a(moc_qtcpsocket.o):
              libQt5Network.a(moc_qudpsocket.o):
              libQt5Network.a(moc_qsocks5socketengine_p.o):
              libQt5Network.a(moc_qhttpsocketengine_p.o):
              libQt5Network.a(moc_qnativesocketengine_p.o):
              libQt5Network.a(moc_qsslerror.o):
              libQt5Network.a(moc_qdtls.o):
              
              S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 27 Feb 2023, 20:34 last edited by
              #6

              Wait, which linking errors are you getting exactly ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              Q 1 Reply Last reply 28 Feb 2023, 18:08
              0
              • S SGaist
                27 Feb 2023, 20:34

                Wait, which linking errors are you getting exactly ?

                Q Offline
                Q Offline
                quutee
                wrote on 28 Feb 2023, 18:08 last edited by
                #7

                @SGaist I am getting the following errors

                clang: error: no such file or directory: '/Users/qtbuilder/Downloads/openssl-1.1.1t/install_dir/lib/libssl.a'
                clang: error: no such file or directory: '/Users/qtbuilder/Downloads/openssl-1.1.1t/install_dir/lib/libcrypto.a'
                

                Note that this path is present only on the machine where qt was built from source (static with static openssl). If I copy the install directory (generated by make install) to another machine, then I get these errors on building samples that require openssl (eg securesocketclient). Somehow the paths passed in OPENSSL_LIBS configure variable get hardcoded.

                S 1 Reply Last reply 28 Feb 2023, 19:12
                0
                • Q quutee
                  28 Feb 2023, 18:08

                  @SGaist I am getting the following errors

                  clang: error: no such file or directory: '/Users/qtbuilder/Downloads/openssl-1.1.1t/install_dir/lib/libssl.a'
                  clang: error: no such file or directory: '/Users/qtbuilder/Downloads/openssl-1.1.1t/install_dir/lib/libcrypto.a'
                  

                  Note that this path is present only on the machine where qt was built from source (static with static openssl). If I copy the install directory (generated by make install) to another machine, then I get these errors on building samples that require openssl (eg securesocketclient). Somehow the paths passed in OPENSSL_LIBS configure variable get hardcoded.

                  S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 28 Feb 2023, 19:12 last edited by
                  #8

                  I would check the content of the .prf files in your Qt installation folder.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  Q 1 Reply Last reply 28 Feb 2023, 19:53
                  0
                  • S SGaist
                    28 Feb 2023, 19:12

                    I would check the content of the .prf files in your Qt installation folder.

                    Q Offline
                    Q Offline
                    quutee
                    wrote on 28 Feb 2023, 19:53 last edited by
                    #9

                    @SGaist There are .prl and .pc files in <install_dir>/lib that contain these hardcoded paths.

                    S 1 Reply Last reply 1 Mar 2023, 19:05
                    0
                    • Q quutee
                      28 Feb 2023, 19:53

                      @SGaist There are .prl and .pc files in <install_dir>/lib that contain these hardcoded paths.

                      S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 1 Mar 2023, 19:05 last edited by
                      #10

                      @quutee sounds like it's a bug. You should check the bug report system to see if there's something related.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0

                      4/10

                      26 Feb 2023, 19:55

                      • Login

                      • Login or register to search.
                      4 out of 10
                      • First post
                        4/10
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved