用MinGW編譯openssl

1.    Download
http://openssl.org/source/
Get openssl-1.0.0.tar.gz.
http://www.activestate.com/activeperl/downloads
Get ActivePerl msi installer.
http://sourceforge.net/projects/mingw/files/
Get msysCORE-1.0.14-1-msys-1.0.14-bin.tar.lzma and gzip-1.3.12-1-msys-1.0.11-bin.tar.lzma. Unpack to C:/MSYS.
Follow C:/MSYS/share/doc/MSYS/msysCORE-1.0.14-1-msys-RELEASE_NOTES.txt and get packages that meet the “Build requirements”, unpack to MSYS or MinGW directory accordingly.

2.    Prepare
Install ActivePerl.
Run C:/MSYS/postinstall/pi.bat for MSYS post installation.
Run C:/MSYS/msys.bat.
因爲openssl-1.0.0.tar.gz中包含了符號鏈接文件,如果用7-Zip解壓可能會出現大小爲0字節的文件,所以應在MSYS中解壓:
cd /d/download/tool/dev
tar -xvzf openssl-1.0.0.tar.gz

修改cms-test.pl中影響後續"make test"步驟的問題。
Modify openssl-1.0.0/test/cms-test.pl:
--- cms-test.pl    2009-11-27 05:12:12 +0800
+++ cms-test-new.pl    2010-05-16 14:15:38 +0800
@@ -56,7 +56,8 @@
 my $ossl_path;
 
 if ( -f "../apps/openssl$ENV{EXE_EXT}" ) {
-    $ossl_path = "../util/shlib_wrap.sh ../apps/openssl";
+#    $ossl_path = "../util/shlib_wrap.sh ../apps/openssl";
+    $ossl_path = "../apps/openssl";
 }
 elsif ( -f "..//out32dll//openssl.exe" ) {
     $ossl_path = "..//out32dll//openssl.exe";
@@ -382,14 +383,20 @@
         $rscmd =~ s/-stream//;   
         $rvcmd =~ s/-stream//;
         }
-        system("$scmd$rscmd 2>cms.err 1>cms.out");
+    #print("DEBUG: $scmd$rscmd 2>cms.err 1>cms.out/n");
+    #system("$scmd$rscmd 2>cms.err 1>cms.out");
+    system("$scmd$rscmd");
         if ($?) {
+        #print("DEBUG: system() returned $?/n");
+        #system("$scmd$rscmd");
+        #print("DEBUG: new system() returned $?/n");
             print "$tnam: generation error/n";
             $$rv++;
             exit 1 if $halt_err;
             next;
         }
-        system("$vcmd$rvcmd 2>cms.err 1>cms.out");
+    #system("$vcmd$rvcmd 2>cms.err 1>cms.out");
+    system("$vcmd$rvcmd");
         if ($?) {
             print "$tnam: verify error/n";
             $$rv++;

3.    Compile
cd openssl-1.0.0
./config -t
./config threads shared no-capieng
make depend
make
make test
make install

因爲目前MinGW版本的wincrypt.h頭文件還未同步某些Windows CryptoAPI新特性,所以要在config時使用no-capieng選項防止編譯相關代碼。另外,要注意config時不要使用--prefix選項,避免因爲MSYS與Windows的目錄結構不同導致問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章