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.0d的Win64版本.
为什么SHA512函数的符号没有前导下划线?我该如何解决这个问题?
Han*_*ant 12
64位代码只有一个调用约定.没有的废话__cdecl,__stdcall,__fastcall等等.无论谁提出另一个x64调用约定来节省一小部分纳秒,都将被即时执行.因此,DLL导出不再需要使用前导下划线和@字符进行装饰.导出的名称只是简单的SHA512.
不幸的是,这并不能解释为什么你的编译器仍然是下划线的前缀.听起来你实际上使用的是32位编译器.