編譯OpenSSL

 

1、編譯OpenSSLhtml

    在編譯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的執行過程:函數

    運行configure:
    perl Configure VC-WIN32 --prefix=c:/openssl測試

    建立Makefile文件:
    ms\do_ms
    
    編譯動態庫:
    nmake -f ms\ntdll.mak
    編譯靜態庫:
    nmake -f ms\nt.mak線程

    測試動態庫:
    nmake -f ms\ntdll.mak test
    測試靜態庫:
    nmake -f ms\nt.mak testhtm

    安裝動態庫:
    nmake -f ms\ntdll.mak install
    安裝靜態庫:
    nmake -f ms\nt.mak installblog

    清除上次動態庫的編譯,以便從新編譯:
    nmake -f ms\ntdll.mak clean
    清除上次靜態庫的編譯,以便從新編譯:
    nmake -f ms\nt.mak cleanip

2、使用OpenSSLssl

    在VC中配置使用以上的函數庫:
    點擊菜單:Tools -> Options,彈出對話框"Options",在該對話框中選擇"Directories"標籤。
    在"Show directories for:"的"Include files"選項中新增目錄"C:\openssl\include";"Library files"選擇中新增目錄"C:\openssl\lib"。
    而後在須要連接OpenSSL函數庫的工程中編譯時加入"libeay32.lib"就能夠了。源碼

3、問題

    我在連接OpenSSL的靜態函數庫時遇到相似如下的問題:
    Linking...
    msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
    ...
    
    這是因爲OpenSSL的靜態函數庫使用的是了VC的多線程DLL的Release版本,而個人程序使用了多線程靜態連接的Release版本。

    調整OpenSSL的靜態函數庫使用的庫函數版本便可,調整過程以下:
    
    編輯文件 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便可。

4、附錄:在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     多線程靜態連接的Release版本        /MTd       LIBCMTD.LIB    多線程靜態連接的Debug版本        /clr       MSVCMRT.LIB    託管代碼和非託管代碼混合        /clr:pure MSVCURT.LIB    純託管代碼    C++ Standard Library:        /MD       MSVCPRT.LIB     多線程DLL的Release版本        /MDd      MSVCPRTD.LIB    多線程DLL的Debug版本        /MT       LIBCPMT.LIB     多線程靜態連接的Release版本        /MTd      LIBCPMTD.LIB    多線程靜態連接的Debug版本

相關文章
相關標籤/搜索