【问题标题】:How to Include OpenSSL in a Qt project如何在 Qt 项目中包含 OpenSSL
【发布时间】:2013-01-18 19:32:49
【问题描述】:

我是 Qt 的新手,我已经进行了一些谷歌搜索,但找不到足够详细的答案。

我需要在基于 qmake 的 Qt 项目中使用 OpenSSL。如何下载/安装/链接它,这样我就可以只做一个包含语句并在我的代码中使用它的功能?

【问题讨论】:

  • 哪个操作系统?
  • 有人知道如何在 mac 上执行此操作吗?

标签: qt windows-7 linker openssl


【解决方案1】:

假设是 Windows,您可以从 Win32 OpenSSL Installation Project page 下载安装。您可以选择一种用于 64 位 Windows 开发或 32 位。只需运行设置,一切都会轻松完成。默认安装目录为:C:\OpenSSL-Win32
Qt creator 中,如果您想将一个库链接到您的项目,您只需将此行添加到您的 .pro 文件(项目文件):

LIBS += -L/path/to -llibname

这就是我们为这个库所做的事情(例如链接 ubsec.lib)

LIBS += -LC:/OpenSSL-Win32/lib -lubsec

注意-L-l.See this question。您甚至不需要在库名称的末尾指定 .lib。

要包含 .h 文件,请将此行添加到您的 .pro 文件中:

INCLUDEPATH += C:/OpenSSL-Win32/include

之后,您可以包含这样的文件:

#include <openssl/aes.h>

【讨论】:

  • 非常感谢。这就是我一直在寻找的答案。
  • 什么是ubsec.lib,它与链接OpenSSL有什么关系?
  • @jww 只是一个例子。
  • “OpenSSL 安装项目”的设置默认将 dll 添加到系统目录中,这样也可以找到正确的 dll,但前提是在安装过程中选中了此选项。否则,可能会有一个来自构建系统某处的 dll 意外加载。我建议在这些步骤之外将 dll 的部署添加到构建输出目录中,以避免此类问题。
  • “捐赠”下有一个有趣的短语:将 Win32 OpenSSL 集成到产品中的企业必须支付至少 225 美元来帮助支付带宽成本。
【解决方案2】:

来自乔治Unable to use AES files of OpenSSL in Qt Creator

如果这是在 Linux 上,请将以下内容添加到您的 .pro 文件中:

PKGCONFIG += openssl 

它将处理所有必要的头文件路径、编译链接器选项和 图书馆。

并确保您已将 openssl-devel 软件包安装在您的 系统。

【讨论】:

    【解决方案3】:

    我正在使用 Qt5.5 开发 Win 7 (32),但这些答案都不适合我。
    所以我只想分享一个终于奏效的解决方案:

    1. 我在 C:\OpenSSL-Win32 中安装了 OpenSSL
    2.在c:\OpenSSL-Win32\MinGW中有两个库文件:
    libeay32.a &amp; ssleay32.a
    3. 我已经复制了它们并重命名了扩展名:
    libeay32.a -&gt; libeay32.lib &amp; ssleay32.a -&gt; ssleay32.lib
    4. 我以这种方式在我的 .pro 文件中链接库:
    LIBS += -LC:/OpenSSL-Win32/lib/MinGW -llibeay32
    LIBS += -LC:/OpenSSL-Win32/lib/MinGW -lssleay32
    INCLUDEPATH += C:/OpenSSL-Win32/include
    5. 我从 C:\OpenSSL-Win32:
    复制了 3 个 .dll 文件 (libeay32.dll、libssl32.dll、ssleay32.dll)
    到我的构建/调试文件夹:
    (build-XXXXX-Desktop_Qt_5_5_1_MSVC2012_32bit-Debug/debug)

    我希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      如果您使用cmake 作为项目的构建系统,那么您可以包含FindOpenSSL.cmake,如下所示:

      #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}Linux 系统上是必需的,以避免链接时错误,例如“dlopen symbol not found...”。在 windows 上它变成了空的。

      如果openssl的安装目录不是标准的,那么你应该提供OPENSSL_ROOT_DIRcmake,例如在include 之前添加set(OPENSSL_ROOT_DIR "C:/msys64/mingw32") 或将-DOPENSSL_ROOT_DIR:PATH=C:/msys64/mingw32 指定为cmake 可执行文件(在“项目”->“构建设置”->“CMake”选项卡中)。

      【讨论】:

        【解决方案5】:

        如果你在win7上,你的qt版本是mingw,你从http://slproweb.com/products/Win32OpenSSL.html安装openssl,确保你的lib应该在OpenSSL-Win32/lib/MinGW中,并添加一个“lib”pre到libeay32.a 和 ssleay32.a 。

        【讨论】:

        • 这看起来是一个很好的答案,但请你说得清楚一点。发送。
        • 对不起,距离上次登录已经很久了。你可以先关注这个stackoverflow.com/a/14681524/6193558然后改两个文件的名字:libeay32.a ssleay32.a。我解决了这个问题,同时参考了其他人的解决方案。希望能帮到你。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 2019-11-14
        • 2012-05-18
        相关资源
        最近更新 更多