我正在尝试使用OpenSSL在C程序中计算sha1哈希值。我正在Mac OS X Yosemite上使用clang进行编译,使用Intel i7(因此是64位)。
相关的代码大致如下:
#include <openssl/evp.h>
...
unsigned char outHash[20];
hash("SHA1","abcd", 20, outHash);
问题在于,使用openssl/evp.h
中的“哈希”函数时,使用clang编译会产生以下错误:
Undefined symbols for architecture x86_64:
"_hash", referenced from:
_getRandomSHA1 in main-68ccd6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
看起来链接器没有找到OpenSSL(“hash”函数未定义)。有什么解决方法吗?
编辑:事实证明,我试图使用一个不存在的函数(“hash”)-对此给你带来困扰很抱歉。
然而,我仍然遇到了相同的问题:包含openssl/evp.h似乎不起作用。
这是我正在使用的哈希函数,它使用EVP执行sha1编码:
unsigned int hash(const char *mode, const char* dataToHash, size_t dataSize, unsigned char* outHashed) {
unsigned int md_len = -1;
const EVP_MD *md = EVP_get_digestbyname(mode);
if(NULL != md) {
EVP_MD_CTX mdctx;
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, dataToHash, dataSize);
EVP_DigestFinal_ex(&mdctx, outHashed, &md_len);
EVP_MD_CTX_cleanup(&mdctx);
}
return md_len;
}
然后我调用:
hash("SHA1","abcd", 20, outHash);
我正在编译,和以前一样,这是我的编译命令(非常简单):
clang main.c
我从链接器中得到了以下错误:
Undefined symbols for architecture x86_64:
"_EVP_DigestFinal_ex", referenced from:
_hash in main-935849.o
"_EVP_DigestInit_ex", referenced from:
_hash in main-935849.o
"_EVP_DigestUpdate", referenced from:
_hash in main-935849.o
"_EVP_MD_CTX_cleanup", referenced from:
_hash in main-935849.o
"_EVP_MD_CTX_init", referenced from:
_hash in main-935849.o
"_EVP_get_digestbyname", referenced from:
_hash in main-935849.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)