为什么在libeay32中SHA512函数的符号没有前导下划线?

Dan*_*ien 1 c c++ linker openssl x86-64

我试图在我SHA512的C++项目中使用OpenSSL的功能.为了做到这一点,我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);
//...
}
Run Code Online (Sandbox Code Playgroud)

但是,在链接时,找不到符号:

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

问题似乎在于libeay32.lib,函数的符号实际上是SHA512(没有前导下划线),我也看到__imp_SHA512它通常会出现__imp__SHA512.

我正在使用Shining Light Productions 的OpenSSL 1.0.0dWin64版本.

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

Han*_*ant 12

64位代码只有一个调用约定.没有的废话__cdecl,__stdcall,__fastcall等等.无论谁提出另一个x64调用约定来节省一小部分纳秒,都将被即时执行.因此,DLL导出不再需要使用前导下划线和@字符进行装饰.导出的名称只是简单的SHA512.

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