1. 程式人生 > >Windows 編譯libcurl(openssl+zlib)(使用VC編譯)

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

org tar 處理器 verify easy 控制臺應用程序 默認安裝 1.0 tps

  • 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編譯)