2017-03-08 1108 views
2

我的系统是Ubuntu16.04 LTS。当我使用OpenSSL EVP_MD_CTX时,出现此错误。谁能帮我?EVP_MD_CTX“错误:'ctx'的存储大小未知”


CODE

#include <stdio.h> 
#include <openssl/evp.h> 
#include <openssl/rsa.h> 
int main() 
{ 
    int ret,inlen,outlen=0; 
    unsigned long e=RSA_3; 
    char data[100],out[500]; 
    EVP_MD_CTX md_ctx, md_ctx2; 
    ... 
} 

错误

[email protected]:/work/test# gcc evp_openssl_test.c -I/usr/local/include -L/usr/local/lib -lssl -lcrypto -o 
evptestevp_openssl_test.c: In function ‘main’: 
evp_openssl_test.c:13:19: error: storage size of ‘md_ctx’ isn’t known 
    EVP_MD_CTX md_ctx,md_ctx2; 

回答

4

您正在使用OpenSSL 1.1.0这使得这种结构(和许多其他)不透明 - 这意味着你不能堆栈分配它。而是这样做:

EVP_MD_CTX *md_ctx; 

md_ctx = EVP_MD_CTX_new(); 
if (md_ctx == NULL) 
    ... 
... 
EVP_MD_CTX_free(md_ctx); 
+0

谢谢,我修改了这种方式的代码,它开始工作。 – tianmt