2011-07-19 151 views
4

我們有一個項目非常類似於this問題中報告的問題,其中OpenSSL是lib B的起點。在編譯可執行文件(Exe 1)時,問題在於我們遇到了一些似乎與OpenSSL鏈接有關的鏈接問題。與OpenSSL靜態鏈接

(cryptlib.obj) LNK2019: unresolved external symbol __alloca_probe_16 referenced in function _OPENSSL_isservice 
(bss_file.obj) LNK2001: unresolved external symbol __alloca_probe_16 
(b_print.obj) LNK2019: unresolved external symbol __ftol2_sse referenced in function _roundv 

編譯庫不會給出任何錯誤。我很想知道這些函數的位置,以便我可以在項目中添加正確的引用。

我在Windows 7上運行了64個PROC,如果可以讓任何區別:)

EDIT1
那些在Win32中與VS2010編譯時有錯誤。

EDIT2
OpenSSL的LIB(libeay32.lib)也編譯nasm爲VS2010(爲Win32)。

EDIT3
如果有人能指出一個鏈接與VS2010(VC2010)或VS2008編譯器來構建OpenSSL的,這也將是有益的(而不是指向InstallW其他**文件中的OpenSSL)

編輯4
我們也使用Windows DDK 2003,如果它可以幫助。

回答

2

下面是我解決問題的步驟:

解決__alloca_probe_16鏈接錯誤

由於我們還有Visual Studio 2008的安裝,我們使用的一些obj文件來解決這個問題。 alloca16.obj存在於Visual Studio 2008文件夾下的四個不同的目錄中(應該是類似於C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/crt/src/intel/XXX_lib的地方,其中XXX可能是dllmtxdll或請注意,我不太清楚它們之間有什麼區別)。

將此路徑添加到該項目的Properties面板下的Linker > General > Addtionnal Library Directories,並將alloca16.obj添加到Linker > Input > Addtional Dependencies解決了該問題。

解決__ftol2_sse鏈接錯誤

這一個是有點棘手。配置OpenSSL與no-sse2標誌似乎喜歡它會解決問題...但不是版本1.0.0d。我創建了包含此一個新的頭文件:

extern "C" { 
    long _ftol(double); 
    long _ftol2_sse(double dblSource) { return _ftol(dblSource); } 
} 

(如圖所示this網站)

+0

該網站(http://software.intel.com/en-us/forums/showthread.php? t = 60003)不再可用... – skyking