2011-03-05 97 views
1

我正在尝试在我的C++项目中使用OpenSSL的SHA512函数。为了做到这一点,我在我的源文件中包含openssl/sha.h,这些文件调用SHA512并链接到libeay32.lib库。为什么libeay32中SHA512函数的符号没有前导下划线?

SHA512声明中openssl/sha.h为:

extern "C" { 
//... 
unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md); 
//... 
} 

联然而,当符号未发现:

 
mysql_sha.obj : error LNK2019: unresolved external symbol _SHA512 referenced in function _sha512 

这个问题似乎是在libeay32.lib,符号的功能实际上是SHA512(没有领先的下划线),而且我通常也会看到__imp_SHA512这将是__imp__SHA512

我正在使用Shining Light Productions的Win64 build of OpenSSL 1.0.0d

为什么SHA512函数的符号没有前导下划线?我如何解决这个问题?

+0

太过本地化了一个问题。更适合邮寄名单。 – 2011-03-05 21:01:47

+0

我不同意毛茸茸的。为什么这个问题困扰你? – TonyK 2011-03-05 21:11:12

+0

@Shaggy:从Windows特有的角度来看,它只是“本地化”的。我自己并没有使用这个平台,但是我明白它由于某种原因仍然非常流行。 – 2011-03-05 21:33:54

回答

12

对于64位代码,只有一种调用约定。没有废话的__cdecl,__stdcall,__fastcall等等。谁想出另一个x64调用约定来节省几纳秒的时间将被立即执行。因此,DLL导出不再需要使用前导下划线和@字符进行修饰。导出的名称只是简单的SHA512。

不幸的是,这并不能解释为什么你的编译器仍然以一个下划线为前缀。听起来你实际上使用的是32位编译器。

+1

啊!我正在使用Win32配置。感谢您指出这一点。 – 2011-03-05 21:12:58

相关问题