在C中编译md5校验和但是编译错误

时间:2015-06-01 13:38:53

标签: c struct compiler-errors md5

尝试按照SO example中的示例进行操作,但在编译以下内容时出现错误:

  

$ gcc te.c
  te.c:功能'main':
  te.c:10:17:错误:'context'的存储大小未知

以下是代码:

#include <string.h>
#include <stdio.h>
#include <openssl/md5.h>
//#include <md5.h>


int main(int argc, char *argv[]) {
    unsigned char digest[16];
    const char* string = "Hello World";
    struct MD5_CTX context;
    MD5Init(&context);
    MD5Update(&context, string, strlen(string));
    MD5Final(digest, &context);
    int i;
    for (i=0; i<16; i++) {
        printf("%02x", digest[i]);
    }
    printf("\n");
    return 0;
}

顺便说一句,我的电脑正在运行ubuntu 12.04桌面。我的gcc版本是4.7.3,这里是libssl-dev的版本

dpkg -l libssl-dev
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  libssl-dev     1.0.1-4ubuntu5 SSL development libraries, header files and

有什么想法吗?

UPDATE1

感谢Sourav Ghosh指出,在上文中,应删除struct中的struct MD5_CTX context。原来应该更改函数名称,例如MD5InitMD5_Init

这是有效的代码:

#include <string.h>
#include <stdio.h>
#include <openssl/md5.h>
//#include <md5.h>


int main(int argc, char *argv[]) {
    unsigned char digest[16];
    const char* string = "Hello World";
    MD5_CTX context;
    MD5_Init(&context);
    MD5_Update(&context, string, strlen(string));
    MD5_Final(digest, &context);
    int i;
    for (i=0; i<16; i++) {
        printf("%02x", digest[i]);
    }
    printf("\n");
    return 0;
}

要编译它,需要使用gcc te.c -lssl -lcrypto。 感谢SO answer也是这样!

1 个答案:

答案 0 :(得分:2)

我认为,(以及I can seeWaveFormat已经是MD5_CTXtypedef。你不需要写struct

将其更改为struct MD5_CTX context;,它应该有效。