如何在 Visual Studio 中包含 OpenSSL

我很难将 openssl 添加到我的项目中.我已经下载了用于 Windows 的预编译安装程序,并且我已经安装了库,但是我找不到在我的项目中包含 openssl 的方法.

注意:我在 Windows 7 x64 上使用 Visual Studio Expres 2012,但它不限于该环境.

解决方案

Intro

  • 虽然问题/答案基于:

    • OpenSSL 1.0.1*
    • VStudio 2012


    它适用于任何OpenSSL 版本(v.0.9.*、v1.0.*em>、v1.1.*、v3.0) 和 任何 VStudio 版本 (v2005+)

  • OpenSSL 构建也可在

  • 将它们复制到可执行文件所在的文件夹中 ([MS.Docs]:动态链接库搜索顺序)

  • 将它们复制到 %PATH% 中的 dir 之一中.
    某些安装程序可能会复制 2 .dllem>s 在您的%SystemRoot%System32"中dir,在这种情况下,这将不再是必要的(我发现这种在系统 dir 中复制内容的做法是一种糟糕的做法,因为在我们当前的示例中,可以提供多个版本相同的文件名,最后安装的将覆盖所有其他文件)

  • 重要说明:将您的项目定位为 32bit 或 64bit 时必须小心(将 Platform 设置为 Win32 或 x64 - 必须与您的 OpenSSL 安装架构相匹配.

    I am having a hard time trying to add openssl to my project. I have downloaded the precompiled installer for windows, and I have the libraries installed, but I can't find a way to include openssl in my project.

    Note: I am using Visual Studio Expres 2012 on Windows 7 x64, but it's not restricted to that environment.

    解决方案

    Intro

    • Although the question / answer is based on:

      • OpenSSL 1.0.1*
      • VStudio 2012


      it applies to any OpenSSL version (v.0.9.*, v1.0.*, v1.1.*, v3.0), and any VStudio version (v2005+)

    • OpenSSL builds are also available at [GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/OpenSSL



    Let's assume you have installed OpenSSL in a dir like: "C:Program FilesOpenssl-Win32-1.0.1p....." (or whatever other name); I am going to refer to that as OPENSSL_INSTALL_DIR (as it was an Nix style env var). So, ${OPENSSL_INSTALL_DIR} should contain a bunch of dirs and files, out of which matter for us:

    • Dirs:

      • include
      • lib
    • Files (since their names vary across versions, I'm going to refer to them using (again, Nix style var) placeholders; also they might be located in a bin subdir):

      • ${LIBCRYPTO}.dll
      • ${LIBSSL}.dll


      where LIBCRYPTO (#1.) and LIBSSL (#2.) are defined as follows:

      • v1.0.2 and older

        1. libeay32
        2. ssleay32 (might be also copied (or symlinked) to libssl32)

      • v1.1.*

        1. libcrypto-1_*(-x64)
        2. libssl-1_*(-x64)

      • v3.0

        1. libcrypto-3*
        2. libssl-3*

    In order to make use of it, in your VStudio project you have to:

    1. Configue the compiler ([MS.Docs]: Compiler Options Listed Alphabetically)
    Instruct it:

    • Where to search for include (header (.h)) files. Go to your "Project Properties -> C/C++ -> General -> Additional Include Directories" and adding ${OPENSSL_INSTALL_DIR}include (if you need to add other paths, separate them by a semicolon (;)). Now you can include in your source code OpenSSL header files.
      Note that because "${OPENSSL_INSTALL_DIR}include" dir contains an openssl subdir and under that subdir are the actual header files, your #include clauses would have to look like this:

      #include <openssl/ssl.h>
      

      Of course you could add ${OPENSSL_INSTALL_DIR}includeopenssl dir to your project, and then the above include statement would be:

      #include <ssl.h>
      

      but the former is preferred (recommended)

    2. Configure the linker ([MS.Docs]: Linker Options)
    Instruct it:

    • Where to search for libraries. You can do that by going to your "Project Properties -> Linker -> General -> Additional Library Directories" and adding ${OPENSSL_INSTALL_DIR}lib (again, if there are multiple paths, separate them by ;)

    • What libraries to use. "${OPENSSL_INSTALL_DIR}lib" dir contains a bunch of .lib files. Out of those, you will (most likely) only need ${LIBCRYPTO}.lib and / or ${LIBSSL}.lib. Go to your "Project Properties -> Linker -> Input -> Additional Dependencies" and add those 2 libraries next to the existing ones

    3. Build and run

    Now, if all your settings and source code are correct, you should have a "buildable" project. When you'll want to run your project output (either an .exe or a .dll needed by another executable, I am not discussing here the possibility of you are using the static libs), the executable will need to find the 2 .dlls that I mentioned at the beginning. For that, you should either:

    • Add their dir to your PATH env var (I consider this the cleanest one). Example (from console): set PATH=%PATH%;${OPENSSL_INSTALL_DIR}

      • For the running VStudio instance:

    • Copy them in the folder where your executable is located ([MS.Docs]: Dynamic-Link Library Search Order)

    • Copy them in one of the dirs from your %PATH%.
      Some installers might copy the 2 .dlls in your "%SystemRoot%System32" dir, and in that case this will no longer be necessary (I find this practice of copying stuff in system dirs a bad one, as in our current example multiple versions can ship the same file names, and the last one installed would overwrite all the others)

    Important note: Must be careful when targeting your project for 32bit or 64bit (setting Platform to Win32 or x64 in VStudio IDE) - that has to match your OpenSSL installation architecture.

    相关文章