我正在我的C++项目中尝试使用OpenSSL的SHA512
函数。为此,我在调用openssl/sha.h
的源文件中包括SHA512
并与libeay32.lib
库链接。SHA512
在openssl/sha.h
中声明为:
extern "C" {
//...
unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md);
//...
}
但是,在链接时,找不到该符号:
mysql_sha.obj:错误LNK2019:函数_sha512中引用的未解析外部符号_SHA512
问题似乎是在
libeay32.lib
中,该函数的符号实际上是SHA512
(无前导下划线),而且我通常在__imp_SHA512
时也看到__imp__SHA512
。我正在使用Shining Light Productions的Win64 build of OpenSSL 1.0.0d。
为什么
SHA512
函数的符号没有下划线?我如何解决这个问题? 最佳答案
对于64位代码,只有一种调用约定。无关的__cdecl
,__stdcall
,__fastcall
等。谁提出另一个x64调用约定以节省一分之一秒的时间,将立即执行。因此,DLL导出不再必须用前划线和@字符修饰。导出的名称只是纯SHA512。
不幸的是,这并不能解释为什么您的编译器仍然在下划线前加前缀。听起来您实际上是在使用32位编译器。
关于c++ - 为什么libeay32中SHA512函数的符号没有下划线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5206741/