使用Open SSL运行C代码

| 我无法编译以下代码。我在终端中使用以下命令在MACOSX中运行它: $ gcc filename.c -lssl 我知道MACOS已经具有内置的openssl(我可以在终端中作为命令来调用)。但是我不确定我是否以正确的方式将其链接到库。
#include <stdio.h>
#include <openssl/evp.h>
main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = \"Test Message\\n\";
char mess2[] = \"Hello World\\n\";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;

OpenSSL_add_all_digests();

if(!argv[1]) {
    printf(\"Usage: mdtest digestname\\n\");
    exit(1);
}

md = EVP_get_digestbyname(argv[1]);

if(!md) {
    printf(\"Unknown message digest %s\\n\", argv[1]);
    exit(1);
}

EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);

printf(\"Digest is: \");
for(i = 0; i < md_len; i++) printf(\"%02x\", md_value[i]);
printf(\"\\n\");
}
我的错误是:  未定义的符号:   \“ _ EVP_MD_CTX_cleanup \”,引用自:ccfZG7WJ.o中的_main ld:找不到符号 collect2:ld返回1退出状态 这个错误让我感到惊讶,因为它显示的是\“ Undefined Symbols \”而不是\“找不到头文件\”。您能帮我调试这个问题吗? 谢谢!     
已邀请:
OpenSSL有2个库:
libssl
libcrypto
。也包括libcrypto。
gcc filename.c -lssl -lcrypto
(对于该程序,您实际上根本不需要
-lssl
,但是包含它也没有什么坏处) libssl用于建立实际的SSL或TLS连接,例如使用https连接到Web服务器时。它还导出
SSL_load_error_strings
,即使仅与密码库一起使用时也很有用。 libcrypto是加密库。它具有加密算法,密钥和证书生成和验证功能,消息身份验证算法等。     
您可以怀疑库未正确链接。有两种可能性: 该库根本没有链接 所链接的库不包含该符号,表明版本不匹配。 第二个似乎更可能,但第一个更容易检查。 ѭ6会指出库的手册页。     
在您的情况下,很有可能\“ Undefined Symbols \”表示您没有链接正确的库。     

要回复问题请先登录注册