標籤:伺服器 協議 lda source ini led 建立 商業 顯示
- libcurl主要功能就是用不同的協議串連和溝通不同的伺服器,如果使用HTTPS,需要OpenSSL
- libcurl https://curl.haxx.se/download.html 下載Source Archives即可
- ActiveState https://www.activestate.com/activeperl/downloads 下載perl解析器,編譯openssl需要用到。
- openssl https://www.openssl.org/source/ 下載openssl-1.0.2k,1.1.0以後的檔案和安裝方法都換了。
- zlib http://zlib.net/ 下載1.2.7以外的版本,比如1.2.11。
解壓
為了方便安裝,在D盤根目錄下建立一個名為libcurl-ssl的檔案夾,將下載的三個壓縮包解壓到該檔案夾。
在 curl-7.54.0 -> lib 下建立檔案夾openssl用來存放openssl的標頭檔。
zlib編譯:
- zlib-1.2.11\contrib\vstudio\vc14\zlibvc.sln,編譯release版本。
- 在產生的x86\ZlibDllRelease檔案夾中有zlibwapi.dll和zlibwapi.lib檔案
ActiveState安裝:
開啟安裝包,選擇Modify預設安裝或Repair修改安裝路徑都可以
openssl編譯:
這是最麻煩、最容易出錯的一環了,因為他沒有專案檔,只能通過命令列來編譯。
- 在開始菜單中找到vs內建的 VS2015 x86 本機工具命令提示字元
- 使用cd命令進入到openssl-1.0.2k檔案夾中
- 命令列鍵入 perl Configure VC-WIN32 no-asm
- 命令列鍵入 ms\do_ms.bat
- 命令列鍵入 nmake -f ms/ntdll.mak
等待差不多五分鐘,只要不出現“stop”,安全地執行到結束,就算成功。
一旦中間出了差錯,最好是把檔案夾也刪了,重新解壓、配置編譯,如果你留有編譯失敗的半成品,它可能會告訴你“無法解析XXX”。
將 openssl-1.0.2k -> inc32 -> openssl 所有的.h 和 openssl-1.0.2k -> out32dll 的 libeay32.lib、libeay32.dll、ssleay32.lib、ssleay32.dll 一起複製到 curl-7.54.0 -> lib -> openssl 中
libcurl編譯:
編譯平台選擇 DLL Debug - DLL OpenSSL
- curl-7.54.0 ->projects -> Windows -> VC14 -> curl-all.sln,可能會提示升級工程,確定即可。
- 將 libcurl 設為啟動項目,選擇 libcurl -> Resource Files -> libcurl.rc,右鍵“移出”,它記錄著版本資訊,只會增大檔案,可以移出掉。
- 選擇 屬性 -> C/C++ -> 前置處理器 -> 前置處理器定義,將"BUILDING_LIBCURL"改成"CURL_STATICLIB"。這樣那些介面函數就不會被聲明為匯出函數了。
- 選擇 屬性 -> 連結器 -> 常規 -> 附加庫目錄 添加 ..\..\..\..\lib\openssl,指向curl-7.54.0 -> lib -> openssl
- 選擇 屬性 -> 連結器 -> 輸入 -> 附加依賴項 添加 libeay32.lib;ssleay32.lib;ws2_32.lib;wldap32.lib; 前兩個是為了OpenSSL,後兩個是CURL必須依賴的。
在編譯成功後 curl-7.54.0 -> build -> Win32 -> VC14 -> DLL Debug - DLL OpenSSL 檔案夾中會產生有 libcurld.dll 和 libcurld.lib(注意名字不是libcurl)。
建立控制台應用程式
例如建立的專案檔夾位於 D: -> LibcurlTest,編譯版本為debug X86。
- 建立 LibcurlTest -> include檔案夾,將 curl-7.54.0 -> include 目錄下的curl檔案夾,複製過去。
- 建立 LibcurlTest -> lib 檔案夾,在lib下建立debug檔案夾。將libcurl編譯的 libcurld.dll 和 libcurld.lib 複製到debug。
- 將libcurld.dll和之前OpenSSL產生的 libeay32.dll、ssleay32.dll 各複製一份到專案檔夾下,否則會報錯。
- 選擇 配置屬性 -> C\C++ -> 前置處理器 -> 前置處理器定義,添加CURL_STATICLIB。
- 屬性中的 附加元件封裝含目錄、附加庫目錄和附加依賴項就在代碼中實現。
測試代碼
#include "stdafx.h"#include "../include/curl/curl.h" #pragma comment(lib,"../lib/debug/libcurld.lib") int main(){ CURL *curl; CURLcode res; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, true); curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); } system("pause"); return 0;}
運行結果:在控制台中顯示 https://www.baidu.com 網頁源碼,如果沒有OpenSSL的編譯和連結,是不能訪問https的。但是顯示中文部分是亂碼,本人水平有限,認為這是C++輸出的問題,我將源碼儲存成txt開啟是沒問題的。
註:本文整理修改自互連網。
李察丶
連結:http://www.jianshu.com/p/2a92e1f30d0c
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
Windows 編譯libcurl(openssl+zlib)(使用VC編譯)