C++ qt linux部署-网络OpenSSL问题?

C++ qt linux部署-网络OpenSSL问题?,c++,qt,deployment,openssl,C++,Qt,Deployment,Openssl,我想给一些同事发一份我写的申请表。 到目前为止,我只是将二进制文件和所有库一起复制到一个.zip文件中并发送给它们。 这很有效 我的最新变化涉及我正在使用Qt网络库。因此,我在.zip文件中包含了三个新的库文件: libQt5Network.so.5 libQt5Network.so.5.11 libQt5Network.so.5.11.1 应用程序启动并运行,但在某个时候,它会从web下载多个文件。 不幸的是,有些下载失败了。可以从FTP服务器下载文件,但不能从https下载文件 我假设它

我想给一些同事发一份我写的申请表。 到目前为止,我只是将二进制文件和所有库一起复制到一个.zip文件中并发送给它们。 这很有效

我的最新变化涉及我正在使用Qt网络库。因此,我在.zip文件中包含了三个新的库文件:

  • libQt5Network.so.5
  • libQt5Network.so.5.11
  • libQt5Network.so.5.11.1
应用程序启动并运行,但在某个时候,它会从web下载多个文件。 不幸的是,有些下载失败了。可以从
FTP
服务器下载文件,但不能从
https
下载文件

我假设它可能与缺少OpenSSL有关,但我不确定。 当我开始使用Qt网络库时,我记得我在从
https
下载它时遇到了问题,这些问题与
OpenSSL
有关

我没有下载文件,而是收到以下错误消息:

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
We got a connection error when networkLayerState is Unknown
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
...
错误消息显然是指
SSL

请注意,我不相信我的代码有问题,因为它在我的计算机上工作。因此,我不会在这里发布代码。 我认为这与我部署代码的方式有关,有些库丢失了?我能做什么

我试图在可执行文件和
libQt5Network.so.5上运行
ldd
,但它没有列出任何与
OpenSSL
相关的内容


请注意,我不是一个计算机专家,我只是一个科学家,希望尽可能容易地将他的软件分发给一些同事

关于这个问题,您是对的-QNetwork需要OpenSSL才能工作

因此,您需要找出一些方法来提供OpenSSL LIB

  • 默认情况下,Linux链接到安装在系统中的libs。所以,目标系统需要具有与您完全相同的版本的QT libs和OpenSSL。 大多数情况下,这是一个糟糕的解决方案,因为您不能保证libs不会更新

  • 您可以使用LD_LIBRARY_PATH环境变量帮助Linux查找libs。使用此方法,您可以发送所需的带有可执行文件的lib,并使用LD_LIBRARY_PATH指向它们。您需要shell脚本来轻松运行应用程序。有关此方法和示例的更多信息,请参见

  • 用libs打包你的应用程序。您可以使用分发本机包管理器的格式。可以在上找到DEB和RPM包创建信息。也可以使用通用AppImage格式。有了它,它变得非常简单,并且可以在每个发行版上使用,这使它成为我最喜欢的选择


  • 前面指定的所有内容都适用于使用动态链接到libs的应用程序,这是构建应用程序的默认方式。对于静态构建的应用程序,您不需要它,因为您的可执行文件中已经有了所有静态链接库()。我的可执行文件由一个shell脚本启动,该脚本类似于在您发送的链接中创建应用程序包的脚本。但是,我不知道在哪里可以找到需要添加到文件夹中的正确OpenSSL库。通常,我只是使用
    ldd
    来查找和复制它。几个月前,我也用
    linuxdeployqt
    尝试了选项3,但请记住它在Ubuntu 18.04中不起作用,我没有安装14.04或16.04。是的,
    linuxdeployqt
    需要Ubuntu 16.04,我使用docker()
    ldd
    可以向您显示符号链接,但不遵循它们,也不显示lib的依赖关系。制作OpenSSL libs的唯一方法可能是从中获得兼容版本,然后自己构建。问题可以帮助您安装libs并在系统中找到它,但OpenSSL lib必须在我的计算机上的某个位置,因为它正在那里工作。。。我说得对吗?所以,如果我找到它,我可能会跟随它。或者我应该再试试
    linuxdeployqt
    ,但我担心我可能无法再次正确安装所有东西……我正在使用Ubuntu,我可以在
    /usr/lib/x86_64-linux-gnu
    中找到libssl libs。您需要
    libssl-dev
    软件包。