1. 程式人生 > >curl配置下載、安裝、使用\檔案下載

curl配置下載、安裝、使用\檔案下載

我下載的是curl-7.58.0.tar.gz。舉例下載路徑為C://download,然後解壓到當前資料夾,會得到資料夾curl-7.58.0。

接下來就是編譯了。

Windows下編譯如下:

X86版本編譯操作如下:

1:windows圖示+r同時按下,輸入cmd(開啟cmd控制檯)

2:cd   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat   初始化VC環境變數(本人使用VS2015)

3:cd c:\download\curl-7.58.0\winbuild

4:nmake /f Makefile.vc mode=static VC=14  在這裡的mode=static表示靜態編譯,VC=14表示vs的版本。

5:builds資料夾就會有 libcurl-vc14-x86-release-static-ipv6-sspi-winssl 資料夾。

有興趣的同志可以用notepad++開啟Makefile.vc檔案看看。

X64版本的編譯操作如下:

(因為我用的版本是VS2015)

1:開始選單 -> Visual Studio 2015 -> VS2015 x64 Native Tools Command Prompt

2:cd c:\download\curl-7.58.0\winbuild

3:nmake /f Makefile.vc mode=static VC=14  在這裡的mode=static表示靜態編譯,VC=14表示vs的版本。

4:builds資料夾就會有 libcurl-vc14-x64-release-static-ipv6-sspi-winssl 資料夾。

接下來我就要說在VS下的配置使用了:

(預設X86)

1:新建工程。

2:進入工程後,工程屬性->C/C++ > General > Additional Include Directories: 新增C:\download\curl-7.58.0\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\include

3:Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions: 新增 CURL_STATICLIB

4:Configuration Properties > Linker > General > Additional Library Directories: 新增 C:\download\curl-7.58.0\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\lib

5:Configuration Properties > Linker > Input > Additional Dependencies: 新增 libcurl_a.lib。

測試程式碼如下:

#include <stdio.h>
#include <curl.h>   
/* For older cURL versions you will also need
#include <curl/types.h>
#include <curl/easy.h>
*/
#include <string.h>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 
{
	size_t written = fwrite(ptr, size, nmemb, stream);
	return written;
}

int main(void) 
{
	CURL *curl;
	FILE *fp;
	CURLcode res;
	char *url = "http://stackoverflow.com";
	char outfilename[FILENAME_MAX] = "page.html";
	curl = curl_easy_init();
	if (curl)
	{
		fp = fopen(outfilename, "wb");
		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
		res = curl_easy_perform(curl);
		/* always cleanup */
		curl_easy_cleanup(curl);
		fclose(fp);
	}
	return 0;
}

這是一個檔案下載的示例。

如果在編譯的時候出現如下問題:

1>------ Build started: Project: LibCurl, Configuration: Debug Win32 ------
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function _main

1>C:\Users\Kyle\Documents\Visual Studio 2010\libcurl\VisualStudio\LibCurl\Debug\LibCurl.exe : fatal error LNK1120: 4 unresolved externals

可能是因為缺少這一項:Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions: 新增 CURL_STATICLIB

因為編譯的時候選擇的是靜態編譯。

(2)說到這有可能就人說我想建立X64的工程怎麼辦,那就說說X64工程

1:新建工程。

2:進入工程後,工程屬性->C/C++ > General > Additional Include Directories: 新增C:\download\curl-7.58.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\include

3:Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions: 新增 CURL_STATICLIB

4:Configuration Properties > Linker > General > Additional Library Directories: 新增 C:\download\curl-7.58.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\lib

5:Configuration Properties > Linker > Input > Additional Dependencies: 新增 libcurl_a.lib。

測試程式碼也可以直接使用上面的程式碼。在使用過程中也可能遇到如上提示的問題,解決方式也如上所述。

(3)說說猜想,本人用notepad++開啟Makefile.vc看過,如果把編譯如上所提到的編譯過程中的第四步,即4:nmake /f Makefile.vc mode=static VC=14  在這裡的mode=static表示靜態編譯,VC=14表示vs的版本。中的mode=static,改成mode=dll應該就可以動態編譯了。沒有嘗試過,只是提出一個猜想。

參考文獻: