ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
一ã€ç¼–è¯‘åÆˆå®‰è£…OpenSSL
1ã€æŒ‰ç…§æ ‡å‡†æ¥éª¤ä»Žæºä»£ç 编译安装OpenSSL
在编译OpenSSLå‰ï¼Œéœ€è¦æ£¼‹®å®‰è£…PerlåQŒå› 为在¾~–译OpenSSLæ—‰™œ€è¦ä‹É用到该程åºã€?br>
ä¸‹è²æœ€æ–°ç‰ˆæœ¬çš„PerlåQ?a >http://downloads.activestate.com/ActivePerl/Windows/。然åŽå®‰è£…之ã€?/p>
ä¸‹è²æœ€æ–°ç‰ˆæœ¬çš„OpenSSLåQ?a >http://www.openssl.org/source/
然厞®†æºç 解压羃到æŸä¸ªç›®å½•(å¦?C:\openssl-0.9.8jåQ‰ä¸ã€?br>
˜q›å…¥opensslæºç 目录ã€?br> cd c:\openssl-0.9.8.j
以下为å‚照该目录下的文äšgINSTALL.W32的执行过½E‹ï¼š
˜q行configureåQ?br> perl Configure VC-WIN32 --prefix=c:/openssl
创å¾Makefileæ–‡äšgåQ?br> ms\do_ms
¾~–译动æ€åº“åQ?br> nmake -f ms\ntdll.mak
¾~–è¯‘é™æ€åº“åQ?br> nmake -f ms\nt.mak
‹¹‹è¯•动æ€åº“åQ?br> nmake -f ms\ntdll.mak test
‹¹‹è¯•陿€åº“åQ?br> nmake -f ms\nt.mak test
安装动æ€åº“åQ?br> nmake -f ms\ntdll.mak install
å®‰è£…é™æ€åº“åQ?br> nmake -f ms\nt.mak install
清除上次动æ€åº“çš„ç¼–è¯‘ï¼Œä»¥ä¾¿é‡æ–°¾~–译åQ?br> nmake -f ms\ntdll.mak clean
æ¸…é™¤ä¸Šæ¬¡é™æ€åº“çš„ç¼–è¯‘ï¼Œä»¥ä¾¿é‡æ–°¾~–译åQ?br> nmake -f ms\nt.mak clean
2ã€å¦‚果嫌éºÈƒ¦åQŒä¸æƒ³ç¼–译,å¯ä»¥ç›´æŽ¥ç”¨åˆ«äººåšå¥½çš„windows OpenSSL 安装包(我用的是0.9.8j版)åQ?br> å¯ä»¥ä»?http://www.slproweb.com/products/Win32OpenSSL.html ä¸‹è² OpenSSL for WindowsåQŒç›´æŽ¥å®‰è£…ã€?/p>
P.S. OpenSSL for Windows çš„æºä»£ç 有一些数æ®ç±»åž‹å’ŒVC6的编译器ä¸å…¼å®¹ï¼Œæˆ‘å‘现的ä¸å…¼å®¹çš„æ•°æ®¾cÕdž‹å¦‚下åQ?br>  在OpenSSL安装目录的下的include/bn.hæ–‡äšgä¸ï¼Œž®?br> #define BN_ULLONG unsigned long long
#define BN_ULONG unsigned long long
#define BN_LONG long long
分别修改为:
#define BN_ULLONG ULONGLONG
#define BN_ULONG ULONGLONG
#define BN_LONG LONGLONG
å¦åˆ™åQŒä¼šå‡ºçް¾~–译错误ã€?/p>
二ã€ä‹É用OpenSSL
在VCä¸é…¾|®ä‹É用以上的函数库:
点击èœå•åQšTools -> OptionsåQŒå¼¹å‡ºå¯¹è¯æ¡†"Options"åQŒåœ¨è¯¥å¯¹è¯æ¡†ä¸é€‰æ‹©"Directories"æ ‡ç¾ã€?br> åœ?Show directories for:"çš?Include files"选项䏿–°å¢žç›®å½?C:\openssl\include"åQ?br> "Library files"é€‰æ‹©ä¸æ–°å¢žç›®å½?C:\openssl\lib"ã€?/p>
ç„¶åŽåœ¨éœ€è¦é“¾æŽ¥OpenSSL函数库的工程ä¸åР入如䏋䏤å¥ï¼š
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
其作用是ž®†OpenSSL所需的库导入工程ä¸ã€?/p>
三ã€é—®é¢?/p>
我在链接OpenSSLçš„é™æ€å‡½æ•°åº“æ—‰™‡åˆ°ç±»ä¼ég»¥ä¸‹çš„问题åQ?br> Linking...
msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
...
˜q™æ˜¯ç”׃ºŽOpenSSLçš„é™æ€å‡½æ•°åº“使用的是了VC的多¾U¿ç¨‹DLLçš„Release版本åQŒè€Œæˆ‘的程åºä‹É用了多线½E‹é™æ€é“¾æŽ¥çš„Release版本ã€?/p>
调整OpenSSLçš„é™æ€å‡½æ•°åº“使用的库函数版本å›_¯åQŒè°ƒæ•´è¿‡½E‹å¦‚下:
¾~–辑文äšg ms\nt.makåQŒå°†è¯¥æ–‡ä»¶ç¬¬19è¡?br> "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å›_¯ã€?/p>
å››ã€é™„录:在VCä¸å¯¹C/C++ ˜q行时库ä¸åŒç‰ˆæœ¬¾~–译指ä×o说明
《在VCä¸å¯¹C/C++ ˜q行时库ä¸åŒç‰ˆæœ¬¾~–译指ä×o说明ã€?http://blog.yesky.com/271/dgkang/1737771.shtml)一文ä¸è¯¦ç»†ä»‹ç»äº†è¿žæŽ¥ä¸åŒç‰ˆæœ¬åº“的编译指令如下:
C Runtime LibraryåQ?br> /MD MSVCRT.LIB 多线½E‹DLLçš„Release版本
/MDd MSVCRTD.LIB 多线½E‹DLLçš„Debug版本
/MT LIBCMT.LIB 多线½E‹é™æ€é“¾æŽ¥çš„Release版本
/MTd LIBCMTD.LIB 多线½E‹é™æ€é“¾æŽ¥çš„Debug版本
/clr MSVCMRT.LIB 托管代ç å’Œéžæ‰˜ç®¡ä»£ç æ··åˆ
/clr:pure MSVCURT.LIB ¾U¯æ‰˜½Ž¡ä»£ç ?br> C++ Standard LibraryåQ?br> /MD MSVCPRT.LIB 多线½E‹DLLçš„Release版本
/MDd MSVCPRTD.LIB 多线½E‹DLLçš„Debug版本
/MT LIBCPMT.LIB 多线½E‹é™æ€é“¾æŽ¥çš„Release版本
/MTd LIBCPMTD.LIB 多线½E‹é™æ€é“¾æŽ¥çš„Debug版本