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,即可成功。