Windows 編譯libcurl(openssl+zlib)(使用VC編譯)

來源:互聯網
上載者:User

標籤:伺服器   協議   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編譯:
  1. zlib-1.2.11\contrib\vstudio\vc14\zlibvc.sln,編譯release版本。
  2. 在產生的x86\ZlibDllRelease檔案夾中有zlibwapi.dll和zlibwapi.lib檔案
ActiveState安裝:

開啟安裝包,選擇Modify預設安裝或Repair修改安裝路徑都可以

openssl編譯:

這是最麻煩、最容易出錯的一環了,因為他沒有專案檔,只能通過命令列來編譯。

  1. 在開始菜單中找到vs內建的 VS2015 x86 本機工具命令提示字元
  2. 使用cd命令進入到openssl-1.0.2k檔案夾中
  3. 命令列鍵入 perl Configure VC-WIN32 no-asm
  4. 命令列鍵入 ms\do_ms.bat
  5. 命令列鍵入 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

  1. curl-7.54.0 ->projects -> Windows -> VC14 -> curl-all.sln,可能會提示升級工程,確定即可。
  2. 將 libcurl 設為啟動項目,選擇 libcurl -> Resource Files -> libcurl.rc,右鍵“移出”,它記錄著版本資訊,只會增大檔案,可以移出掉。
  3. 選擇 屬性 -> C/C++ -> 前置處理器 -> 前置處理器定義,將"BUILDING_LIBCURL"改成"CURL_STATICLIB"。這樣那些介面函數就不會被聲明為匯出函數了。
  4. 選擇 屬性 -> 連結器 -> 常規 -> 附加庫目錄 添加 ..\..\..\..\lib\openssl,指向curl-7.54.0 -> lib -> openssl
  5. 選擇 屬性 -> 連結器 -> 輸入 -> 附加依賴項 添加 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。

  1. 建立 LibcurlTest -> include檔案夾,將 curl-7.54.0 -> include 目錄下的curl檔案夾,複製過去。
  2. 建立 LibcurlTest -> lib 檔案夾,在lib下建立debug檔案夾。將libcurl編譯的 libcurld.dll 和 libcurld.lib 複製到debug。
  3. 將libcurld.dll和之前OpenSSL產生的 libeay32.dll、ssleay32.dll 各複製一份到專案檔夾下,否則會報錯。
  4. 選擇 配置屬性 -> C\C++ -> 前置處理器 -> 前置處理器定義,添加CURL_STATICLIB。
  5. 屬性中的 附加元件封裝含目錄、附加庫目錄和附加依賴項就在代碼中實現。
測試代碼
#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編譯)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.