#本文開發環境#
Window 10 x64 Enterprise [10.0.17763.475]
下載地址1:https://msdn.itellyou.cn/
下載地址2:https://msdn.rg-adguard.net/public.php
Visual Studio 2017/2019 Enterprise
下載地址:https://www.visualstudio.com/downloads/
libcurl [7.55.1-7.65.1]
下載地址:https://curl.haxx.se/download.html
【警告】
請確保電腦上沒有安裝2017/2019以外版本的Visual Studio(尤其是2015),否則可能會出現LNK2001錯誤。
編譯
- 理論上官方提供了預編譯包,但是沒研究明白應該怎麼用,有大佬的話麻煩指點一下。
打開上方源碼下載地址,下載最新版的壓縮包。
解壓,並進入文件夾,運行buildconf.bat
。
本文以編譯x64爲例
在開始菜單中找到Visual Studio 2017/2019
文件夾,編譯64位則右擊x64 Native Tools Command Prompt for VS 2017/2019
,編譯32位則右擊x86 Native Tools Command Prompt for VS 2017/2019
,選擇Run as administrator
。
進入curl文件夾中的winbuild
文件夾。
VS2017/2019+x64+靜態編譯:
輸入nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=no
。
如果想使用動態編譯,將mode=static
改爲mode=dll
。(本文僅教靜態編譯,同時curl官方也不建議使用動態編譯)
如果使用x86,將MACHINE=x64
改爲MACHINE=x86
。
如果需要debug版,將DEBUG=no
改爲DEBUG=yes
。
如果你是VS2017且未更新到最新版,VC=15
建議改爲VC=14
。
更詳細的編譯指令及說明可以打開winbuild
文件夾中的BUILD.WINDOWS.txt
查看。
回車,等待編譯完成,關閉控制檯界面。
打開curl文件夾中的builds
文件夾,將名字最短的文件夾備份(如果x64和x86都編譯了,則需要備份兩個名字最短的文件夾),curl文件夾如果無其他需要則可全部刪除。
本文將編譯生成的文件夾剪切至其他路徑,以便長期使用。
配置工程
新建一個項目。本文選擇新建一個名爲Test
的空項目。
右擊項目,選擇Properties
。
選擇需要的配置。
下圖爲本文所選擇的Configurations
和Platform
,請自行根據需要選擇切換。
將編譯得到include
文件夾和lib
文件夾添加至工程。
如果編譯了debug版libcurl,則應將debug文件夾中的內容添加至Configurations: Debug
將以下lib添加至工程。
libcurl_a.lib
Ws2_32.lib
Wldap32.lib
winmm.lib
Crypt32.lib
Normaliz.lib
本文使用了靜態編譯,所以需要將CURL_STATICLIB
添加至工程。
本文使用了靜態編譯且沒有編譯debug版libcurl,所以Runtime Library
直接選擇了/MD
。
如果編譯了debug版libcurl,請在Configurations: Debug
中使用/MDd
而Configurations: Release
中使用/MD
。
如果使用了動態編譯,對應改爲/MTd
和/MT
。
注意此處設置修改爲和上述設置一致。
測試代碼
#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;
}
恕不作答VS2019以外的編譯器如何配置libcurl。