编译OpenSSL
?
一、編譯OpenSSL
??? 在編譯OpenSSL前,需要正確安裝Perl,因為在編譯OpenSSL時需要使用到該程序。
????
??? 下載最新版本的Perl:http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.zip。然后安裝之。
??? 下載最新版本的OpenSSL:http://www.openssl.org/source/openssl-0.9.8g.tar.gz
????
??? 然后將源碼釋放的c:\openssl-0.9.8g目錄中。
????
??? 進入openssl源碼目錄。
??? cd c:\openssl-0.9.8.g
????
??? 以下為參照該目錄下的文件INSTALL.W32的執(zhí)行過程:
??? 運行configure:
??? perl Configure VC-WIN32 --prefix=c:/openssl
??? 創(chuàng)建Makefile文件:
??? ms\do_ms
????
??? 編譯動態(tài)庫:
??? nmake -f ms\ntdll.mak
??? 編譯靜態(tài)庫:
??? nmake -f ms\nt.mak
??? 測試動態(tài)庫:
??? nmake -f ms\ntdll.mak test
??? 測試靜態(tài)庫:
??? nmake -f ms\nt.mak test
??? 安裝動態(tài)庫:
??? nmake -f ms\ntdll.mak install
??? 安裝靜態(tài)庫:
??? nmake -f ms\nt.mak install
??? 清除上次動態(tài)庫的編譯,以便重新編譯:
??? nmake -f ms\ntdll.mak clean
??? 清除上次靜態(tài)庫的編譯,以便重新編譯:
??? nmake -f ms\nt.mak clean
二、使用OpenSSL
??? 在VC中配置使用以上的函數(shù)庫:
??? 點擊菜單:Tools -> Options,彈出對話框"Options",在該對話框中選擇"Directories"標簽。
??? 在"Show directories for:"的"Include files"選項中新增目錄"C:\openssl\include";"Library files"選擇中新增目錄"C:\openssl\lib"。
??? 然后在需要鏈接OpenSSL函數(shù)庫的工程中編譯時加入"libeay32.lib"就可以了。
三、問題
??? 我在鏈接OpenSSL的靜態(tài)函數(shù)庫時遇到類似以下的問題:
??? Linking...
??? msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
??? ...
????
??? 這是由于OpenSSL的靜態(tài)函數(shù)庫使用的是了VC的多線程DLL的Release版本,而我的程序使用了多線程靜態(tài)鏈接的Release版本。
??? 調(diào)整OpenSSL的靜態(tài)函數(shù)庫使用的庫函數(shù)版本即可,調(diào)整過程如下:
????
??? 編輯文件 ms\nt.mak,將該文件第19行
??? "CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE"
??? 中的"/MD"修改為"/MT"。然后重新編譯安裝OpenSSL即可。
四、附錄:在VC中對C/C++ 運行時庫不同版本編譯指令說明
??? 《在VC中對C/C++ 運行時庫不同版本編譯指令說明》(http://blog.yesky.com/271/dgkang/1737771.shtml)一文中詳細介紹了連接不同版本庫的編譯指令如下:
??? C Runtime Library:
??????? /MD??????? MSVCRT.LIB???? 多線程DLL的Release版本
??????? /MDd?????? MSVCRTD.LIB??? 多線程DLL的Debug版本
??????? /MT??????? LIBCMT.LIB???? 多線程靜態(tài)鏈接的Release版本
??????? /MTd?????? LIBCMTD.LIB??? 多線程靜態(tài)鏈接的Debug版本
??????? /clr?????? MSVCMRT.LIB??? 托管代碼和非托管代碼混合
??????? /clr:pure MSVCURT.LIB??? 純托管代碼
??? C++ Standard Library:
??????? /MD?????? MSVCPRT.LIB???? 多線程DLL的Release版本
??????? /MDd????? MSVCPRTD.LIB??? 多線程DLL的Debug版本
??????? /MT?????? LIBCPMT.LIB???? 多線程靜態(tài)鏈接的Release版本
??????? /MTd????? LIBCPMTD.LIB??? 多線程靜態(tài)鏈接的Debug版本
轉(zhuǎn)載于:https://www.cnblogs.com/gllxy/p/3365086.html
總結(jié)
- 上一篇: openAL在mac下播放音源结束时判断
- 下一篇: 前缀、中缀、后缀表达式及其相互转化的Ja