1. 程式人生 > >Visual Studio(VS2017)編譯並配置C/C++-libcurl開發環境

Visual Studio(VS2017)編譯並配置C/C++-libcurl開發環境

本文開發環境

【警告】
請確保電腦上沒有安裝VS2017以外版本的Visual Studio(尤其是VS2015),否則可能會出現LNK2001錯誤

編譯libcurl

開啟上方libcurl的下載地址,下載最新版的壓縮包。
這裡寫圖片描述

解壓。本文選擇解壓至桌面(強烈建議解壓至桌面)。
這裡寫圖片描述

開啟curl資料夾,執行buildconf.bat
這裡寫圖片描述

進入curl資料夾中的winbuild資料夾,並複製其路徑。
這裡寫圖片描述

本文以編譯x64為例

在開始選單中找到Visual Studio 2017資料夾,編譯64位則右擊x64 Native Tools Command Prompt for VS 2017

,編譯32位則右擊x86 Native Tools Command Prompt for VS 2017選擇Run as administrator
這裡寫圖片描述

輸入cd(有空格),再貼上剛剛複製的winbuild資料夾路徑,回車。(如果命令列碟符和winbuild資料夾所在盤碟符不同,則需要先切到winbuild資料夾所在盤)
這裡寫圖片描述

VS2017+x64+靜態編譯:
輸入nmake /f Makefile.vc mode=static VC=14 MACHINE=x64 DEBUG=no
如果想使用動態編譯,將mode=static改為mode=dll。(本文僅教靜態編譯,同時curl官方也不建議使用動態編譯)
如果使用x86,將MACHINE=x64

改為MACHINE=x86
如果需要debug版,將DEBUG=no改為DEBUG=yes
如果你是最新版的VS2017,VC=14可以改為VC=15
更詳細的編譯指令及說明可以開啟winbuild資料夾中的BUILD.WINDOWS.txt檢視。
這裡寫圖片描述

回車,等待編譯完成,關閉控制檯介面。
開啟curl資料夾中的builds資料夾,將名字最短的資料夾備份(如果x64和x86都編譯了,則需要備份兩個名字最短的資料夾),curl資料夾如果無其他需要則可全部刪除。
這裡寫圖片描述

配置工程

本文將編譯生成的資料夾剪下至其他路徑,以便長期使用。
這裡寫圖片描述

新建一個專案。本文選擇新建一個名為Test

的空專案。
這裡寫圖片描述

右擊專案,選擇Properties
這裡寫圖片描述

選擇需要的配置。
本圖為本文所選擇的配置,請自行根據需要選擇配置。
這裡寫圖片描述

將剛剛編譯生成的資料夾中的include資料夾和lib資料夾新增至工程。(如果編譯了debug版libcurl,則應將debug資料夾中的內容新增至debug配置工程)
這裡寫圖片描述

將以下lib新增至工程。

libcurl_a.lib
Ws2_32.lib
Wldap32.lib
winmm.lib
Crypt32.lib
Normaliz.lib

這裡寫圖片描述

本文使用了靜態編譯libcurl,所以需要將CURL_STATICLIB新增至工程。
這裡寫圖片描述

如果沒有編譯debug版libcurl,則需要將“Runtime Library”改為Release版(即後面不帶小寫字母d)。同時官方並不建議使用“/MT”或“/MTd”。
這裡寫圖片描述

注意此處設定修改為和上述設定一致。
這裡寫圖片描述

測試程式碼

#include <curl/curl.h>    

int main(int argc, char* argv[]) {
    CURL *curl = 0;
    CURLcode res;
    curl = curl_easy_init();
    if (curl != 0) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");
        /* example.com is redirected, so we tell libcurl to follow redirection */
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }
        /* always cleanup */
        curl_easy_cleanup(curl);
    }

    return 0;
}

恕不作答VS2017以外的編譯器如何配置libcurl。