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

标签 c++ c linker openssl x86-64

我正在尝试在我的 C++ 项目中使用 OpenSSL 的 SHA512 函数。为此,我在调用 SHA512 的源文件中包含 openssl/sha.h 并链接到 libeay32.lib 库。

SHA512openssl/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

我正在使用 Win64 build of OpenSSL 1.0.0d来自 Shining Light Productions。

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

最佳答案

64 位代码只有一种调用约定。 __cdecl__stdcall__fastcall 等废话。谁想出另一个 x64 调用约定来节省几分之一纳秒,谁就会被立即执行。因此,DLL 导出不再需要用前导下划线和 @ 字符修饰。导出的名称只是普通的 SHA512。

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

关于c++ - 为什么libeay32中SHA512函数的符号没有前导下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206741/

相关文章:

c - 我无法在项目中使用输入文件,因为 Clion 似乎看不到该文件

c - 使用 memset 时,数组未正确重置

c++ - 如何从g++中的链接库中删除路径

ios - ShareKit ios 的链接器错误

c++ - 加载和卸载 shell 扩展库

c++ - 这种错误: redefinition of 'function' as different kind of symbol的原因是什么

c++ - 在 Visual C++ 中使用 dllimport

c++ - 为什么我的 pow 方法不起作用?

c - dladdr 不返回函数名

c++ - VC++ 6 链接器错误