【问题标题】:How to compile openssl for only two functions如何只为两个函数编译openssl
【发布时间】:2011-10-26 10:56:21
【问题描述】:
我正在尝试使用 openssl 来编码一个简单的字符串,不需要解密它。
我正在使用函数
AES_set_encrypt_key()
AES_cfb128_encrypt()
我需要我认为只有包括:
#include <openssl/aes.h>
我在 Web 或 openssl 网站上找不到有关如何为 Visual Studio 项目编译源代码的说明。有谁知道这应该怎么做?
我可以只编译与这两个函数相关的代码吗?
非常感谢
【问题讨论】:
标签:
c++
encryption
openssl
【解决方案1】:
我了解您希望在代码中使用这些函数。您不需要为此编译 OpenSSL。
在您的开发机器上安装该软件包(如果为 Windows 开发,您可以获得最新的安装程序here)。它将包含您需要包含在代码中的头文件(它们将在c:\OpenSSL-Win32\include\openssl 中)、您需要链接您的应用程序的静态库(在c:\OpenSSL-Win32\lib\VC 中)和您的应用程序需要运行的DLL(在c:\OpenSSL-Win32\bin 中) .
因此,在您的代码中,您将拥有:
#include <openssl/aes.h>
...
AES_set_encrypt_key(...);
...
AES_cfb128_encrypt(...);
...
您的编译器需要知道包含的头文件的路径(openssl 目录的路径),因此您需要提供它。如果您使用的是 Visual Studio,请打开项目设置并将 c:\OpenSSL-Win32\include 添加到其他包含目录。
在链接器部分,将ssleay32MDd.lib;libeay32MDd.lib; 添加到附加依赖项,以便您的链接器知道要查找哪些 OpenSSL 库。这些库的路径 - c:\OpenSSL-Win32\lib\VC - 添加到其他库目录。
小心使用这些库:它们需要链接到与您的应用程序相同的运行时库。它们的后缀告诉您它们链接到哪个运行时库:我上面提到的库具有后缀 MDd,这意味着它们使用多线程调试 DLL (/MDd) - 因此,如果您的应用程序使用相同的运行时,您将包括它们(在代码中检查这一点生成->运行时库设置)。
您的应用程序现在将构建,但要运行它,您的二进制文件需要能够访问 OpenSSL DLL libeay32.dll,这取决于它。将该 DLL 复制到系统目录或您正在运行应用程序的目录,或将路径 c:\OpenSSL-Win32\bin 添加到 Path 环境变量。