因爲公司一個小項目需要用到HTTP的Get請求,於是就用到了這個庫,編譯過程比較折騰,又是谷歌又是百度,這裏詳細記錄一下,希望後面有需要的朋友不要再採坑,這裏只記錄編譯出目標靜態庫和把靜態庫鏈接進項目的過程以及中途出現的問題,動態庫編譯請自行百度
第一步,當然是下載,我下載的是最新的版本
https://github.com/curl/curl/tree/curl-7_68_0 ,我解壓到了 D:\curl-curl-7_68_0 (這個自己可以換,你自己是哪個目錄隨便)
第二步,當然就是編譯拉
打開VS2017 X64 本機工具命令提示 窗口,切換到 D:\curl-curl-7_68_0\winbuild,輸入以下命令進行編譯:
nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=yes ENABLE_IDN=no 標紅部分 如果是編譯靜態庫一定要輸入,不然在後面把libcurl庫引入到工程後,鏈接會報
錯誤 LNK2019 無法解析的外部符號 __imp_IdnToAscii,該符號在函數 curl_win32_idn_to_ascii 中被引用 ApplicationSecurity D:\C#Project\ApplicationSecurityService\ApplicationSecurity\libcurl_a_debug.lib(idn_win32.obj) 1
這個錯誤會有兩個,我這隻保留了一個,如果你在編譯時出現了這個錯誤,那麼你只要在編譯命令中加入紅色部分,從新生成靜態庫即可.
等待編譯完成後,在 D:\curl-curl-7_68_0\builds 目錄下會出現三個文件夾,
選紅色指向的那個,將其中的三個文件夾,放到你喜歡的地方,這裏我放到了 D:\libcurl-vc15 下面
第三步,在工程中引入libcurl庫,libcurl_a_debug.lib,引入頭文件包含D:\libcurl-vc15\include,引入附加庫目錄 D:\libcurl-vc15\lib,
同時引入以下幾個庫,不然編譯會報LNK2019錯誤, ws2_32.lib,crypt32.lib,Wldap32.lib
最後 可以使用下面代碼進行測試
#include "curl/curl.h"
void httpGetRequest()
{
CURL *curl = nullptr;
CURLcode res;
curl = curl_easy_init();
if (curl != nullptr) {
curl_easy_setopt(curl, CURLOPT_URL, "http://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);
}
}
能正常編譯通過,那麼就完成了libcurl庫的編譯和引入工作了