ActivePerl+zlib+OpenSSL+libssh2+curl編譯(windows)

WINDOWS平臺上使用CURL庫發送網絡消息,必須支持https,那麼CURL庫也就必須帶OPENSSL,我電腦是WIN7系統32位,故以下的各種編譯均是在該環境下實測通過

如果需要支持彙編,還需要提前安裝nasm,下載地址爲:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D

 

開始編之前,需要準備幾個工具,打開vs的命令提示行,分別cl回車,輸入nmake -v 回車,如果有任意一個說不是內部或外部命令之類的,就需要配一些環境否則可跳過這部分

   1.添加環境變量:

       1.1在環境變量的系統變量中添加INCLUDE項,值是

            D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft SDKs\Windows\v7.1\Include

       1.2添加LIB項,值是

           D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

       1.3在path項中添加

          D:\Program Files\Microsoft Visual Studio 8\Common7\Tools;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\VC\bin;

  2.到D:\Program Files\Microsoft Visual Studio 8\Common7\Tools執行一下vsvars32.bat

  3.再次嘗試cl回車和nmake -v回車,如果還不行,就註銷一下系統,然後就可以了

 

上面的環境正常以後就可以開始了

第一步:下載安裝配置ActivePerl

              下載地址:http://www.activestate.com/activeperl/downloads

               在cmd中輸入perl -v可以查看perl的版本號,如果出現perl不是內部命令錯誤,這將perl的路徑d:\perl\bin添加到環境變量中的系統變量中的path中,在試一下perl -v命令,如果還是不行,計算機重啓一下就可以了

 

第二步:下載安裝Zlib,我下載的版本爲zlib 1.2.11

               下載地址:http://zlib.net/

                網站上既有源碼也有已經編譯好的lib,我這裏自己重新編譯一遍,有兩種編譯方式:

               編譯方式一:用makefile(zlib1211\win32)編譯,makefile需要啓動VS2008命令提示來進行編譯

                                    第一步:啓動VS2008命令提示

                                    第二步:分別輸入以下兩個指令

                                                 cd /d F:\curlpack\zlib-1.2.11

                                                 nmake -f win32/Makefile.msc

 

                                                         編譯完成後,我們在zlib文件下查看,會看到以下兩個編譯完成的文件

              編譯方式二:用VS編譯,我用VS2008

                                   第一步:cmd 命令進入 zlib-1.2.11\contrib\masmx86

                                                 如果是64位機器,則進入 zlib-1.2.11\contrib\masmx64

                                   第二步:運行 bld_ml32.bat,會生成inffas32.asm,match686.asm這兩個文件,這兩個文件在後面的VS編譯中需要用到

                                                  當然,在這步之後,在VS2008命令提示中進入zlib的文件夾然後輸入下面的命令也是可以編譯成功的

                                                  nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"

                                   第三步:打開VS2008,打開zlib-1.2.11\contrib\vstudio\vc9\zlibvc.sln ,選擇WIN32平臺,編譯整個解決方案或者zlibvc這個項目即可得到

  

第三步:下載編譯OPENSSL,我下載的版本爲 openssl-1.0.2k.tar.gz

              下載地址:http://www.openssl.org/source/

               http://slproweb.com/products/Win32OpenSSL.html   這裏可以直接下載OPENSSL的安裝包,不需要我們自己去編譯,方便好用

               OPENSSL是需要自己編譯的,有兩種編譯方式,分別是makefike和VS編譯

               編譯方式一:命令行方式,打開VS2008命令提示

                                 第一步:解壓壓縮包後,請打開openssl-1.0.2k文件夾下的 INSTALL.W32 ,這裏有詳細的編譯說明,對應的平臺打開對應的INSTALL文件即可

                                               新建一個存放OPENSSL編譯結果的文件夾,我的是:F:\curlpack\openssl

                                 第二步:VS2008命令行中進入解壓後的文件夾中

                                               cd F:\curlpack\openssl-1.0.2k

                                第三步:繼續輸入命令

                                              perl Configure VC-WIN32 no-asm --prefix=F:\curlpack\openssl

                                              ms\do_ms

                                              nmake -f ms\ntdll.mak

                                

                                 第四步:編譯完成之後,用這個命令測試編譯是否成功

                                               nmake -f ms\ntdll.mak test

                                 第五步:安裝

                                               nmake -f ms\ntdll.mak install

第四步:下載libssh2,我下載的版本是libssh2-1.7.0.tar.gz

               下載地址:https://www.libssh2.org/download/

                因爲我選擇的curl是帶SSL 和 SSH的,所以有了這一步,如果只選擇該版本SSL的,那這一步就要替換成ngttp2 的下載了

                網上提供了源碼和目標DLL安裝包,一般直接下載DLL安裝比較快捷,我選擇的是自己編譯

                第一步:打開libssh2-1.7.0\win32 文件夾下的config.mk 修改裏面的OPENSSL和ZLIB的路徑爲上面編譯好的路徑,這裏也可以把zlib相關選項關閉掉

                第二步:也是有兩種編譯方式,makefile和VS編譯

                             編譯方式一:用makefike編譯,打開VS2008命令提示工具,進入根目錄

                                                   cd F:\curlpack\libssh2-1.7.0

                                                    nmake /f NMakefile

                             編譯方式二:

                              用VS2008打開 F:\curlpack\libssh2-1.7.0\win32\libssh2.dsw 工程,提示轉換,選擇全部轉換

                              如果直接編譯libssh2工程,會報錯:fatal error C1083: 無法打開包括文件:“openssl/opensslconf.h”: No such file or directory

                              因爲我編譯好的openssl並不在libssh2的文件夾下,所以需要添加路徑

                              libssh2依賴openssl 和 zlib ,現在把需要包含的文件路徑添加進項目:  工具--》選項--》項目和解決方案--》VC++目錄

                              當然這個路徑的添加也可以在  項目屬性頁中添加

                              添加包含文件路徑

                              添加庫文件路徑

                             我看網上還有大神在這裏有一步:項目屬性頁--》C++--》代碼生成--》運行庫--》多線程(/MT)      

                             我沒有這步也是可以編譯成功的,也就是用的默認的,不知道這一步有什麼作用,有待查證,所以這裏記一筆                    

                             然後再編譯libssh2工程即可成功!

第五步:下載curl,我下載的版本是 curl-7.53.1_SSL_SSH.zip

                下載地址:https://curl.haxx.se/download.html

                 可以看到有很多版本可以選擇

                  我選擇curl-7.53.1_SSL_SSH.zip 只是因爲第一個只帶SSL的需要ngttp2,而這個庫我是怎麼都下載不下來,所以放棄了,如下所示

                   好了,下載完成之後,解壓F:\curlpack\curl-7.53.1

                   同樣,也有兩種編譯方式,一種makefile,一種是VS編譯

                    編譯方式一:makefile編譯,需要使用VS2008的命令提示

                                        第一步:打開VS2008命令提示,進入解壓後的根目錄

                                                       cd F:\curlpack\curl-7.53.1\winbuild

                                        第二步:編譯命令可參考該目錄下的 BUILD.WINDOWS.txt

                                                     

                    編譯方式二:用VS2008打開工程編譯

                                         第一步:用VS打開工程F:\curlpack\curl-7.53.1\projects\Windows\VC9\curl-all.sln

                                         第二步:對libcurl項目,增加包含文件和庫文件路徑

 

                                         編譯libcurl項目,這時我出現鏈接錯誤:fatal error LNK1181: 無法打開輸入文件“libssh2d.lib”

                                          一看,原來是文件名的問題,將項目屬性--》鏈接器--》輸入--》附加依賴項  裏面的libssh2d.lib 修改爲 libssh2.lib即可編譯成功

                                 第三步:同樣增加curl項目的包含文件和包含庫的項目,編譯curl,即可成功。

                                

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