2011-03-05 36 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

相關問題