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

标签 c struct compiler-errors md5

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

$ gcc te.c
te.c: In function ‘main’:
te.c:10:17: error: storage size of ‘context’ isn’t known

代码如下:

#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

有什么想法吗?

更新1

感谢 Sourav Ghosh,他在上面指出,struct MD5_CTX context 中的 struct 应该被删除。原来函数名称也应该更改,例如 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也是为了这个!

最佳答案

我认为,(和 I can see 一样)MD5_CTX 已经是 structtypedef。您不需要编写 struct MD5_CTX context;

将其更改为 MD5_CTX 上下文; 它应该可以工作。

关于在 C 中编译 md5 校验和但出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575080/

相关文章:

c - 如果在其他函数中递增,则指针不会递增

c++ - 在服务器上部署本地编译的二进制文件

objective-c - Objective-C 中的 int 会自动初始化为 0 吗?

c - int var[] 和 int var[0] 有什么区别

c - Typedef 结构指针正确指向 typedef 结构 (C)

c++ - 模板函数给出 "no matching function for call"错误

c - 如何在 C 中使用枚举类型结构?

compiler-errors - gcc 汇编程序消息无法打开/tmp/ccqjY5HV.s 以读取没有这样的文件或目录

c++ - Linux 上的编译 - 在函数 '_start' : (. text+0x20) 中:对 'main' 的 undefined reference

c - C 中变量声明的排列决定了哪一个被执行?