在中断15年之后,我回到了C ++,并且一直在努力记住如何使#include中的变量/函数可用于void函数。目前,我使用的是一个.cpp文件,但是会将函数导出到一个单独的.cpp文件中,以便在需要时调用。
我有以下内容:
// C++
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <errno.h>
#include <cstring>
// OpenSSL
#include <evp.h>
#include <aes.h>
#include <rand.h>
#include <err.h>
#include <buffer.h>
using namespace std;
typedef struct _cipher_params_t {
unsigned char *key;
unsigned char *iv;
unsigned int encrypt;
const EVP_CIPHER *cipher_type;
}cipher_params_t;
EVP_CIPHER在evp.h文件中,但似乎无法找到它。我的包含路径似乎在起作用,因为当我键入#include <>时,我可以看到/选择模块,它会在其他包含(aes.h)中找到其他变量。
此外,在下面的函数中,即使从其他内容(例如err.h)解析而声明了evp.h的项目,例如EVP_CIPHER_CTX * ctx,也无法识别。
void file_encrypt_decrypt(cipher_params_t *params, FILE *ifp, FILE *ofp) {
/* Allow enough space in output buffer for additional block */
int cipher_block_size = EVP_CIPHER_block_size(params->cipher_type);
unsigned char in_buf[BUFSIZE], out_buf[in_buf + cipher_block_size];
int num_bytes_read, out_len;
EVP_CIPHER_CTX *ctx;
:
:
我正在将Visual Studio 2017 Enterprise与openSSL一起使用。有什么建议么?链接配置参数中是否输入了错误的参数?
任何建议都将不胜感激! 谢谢 丽塔
答案 0 :(得分:1)
在设置Visual Studio项目以使用OpenSSL SDK构建时,您应该执行以下操作(如果Visual Studio设置的名称不太准确,请原谅;我没有在其中运行dev-studio在我的面前,所以我要从记忆中完成所有工作):
libeay32.lib
添加到库文件集(应该已经通过继承包含了kernel32.lib,user32.lib等)。如果您还使用SSL_xxx API,则该列表上还需要ssleay32.lib
。所有这些都准备就绪,然后便是标题和包含的函数decls的实际用法。在任何使用OpenSSL API的地方,都应通过相关标头插入该API。因为OpenSSLDir / include在include路径中,所以您已经到了一半。 所有OpenSSL标头都应采用以下格式:
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/aes.h>
... etc ...
OpenSSL标头经常(阅读:保证会发生)在SDK中包含 other 标头,它们与完全包含相同的命名法。因此,至关重要的是,将其设置为以相同的方式为您(进而也为他们)工作。按照我提供的说明,它应该可以工作。
在实际运行程序时,我要确保您的构建平台的libeay32.dll
和ssleay32.dll
在正确的路径或当前的工作目录中,您。确保OpenSSLDir / bin文件夹位于我们的路径(或Visual Studio调试器的启动设置)中,这是最简单的方法。