curl下载:https://curl.haxx.se/download.html
我下载的是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
因为编译的时候选择的是静态编译。
此问题讨论解决网址:https://stackoverflow.com/questions/4176503/unresolved-symbols-when-linking-a-program-using-libcurl
(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应该就可以动态编译了。没有尝试过,只是提出一个猜想。
遇到问题:
1.__imp_IdnToAscii nmake /f Makefile.vc mode=static VC=14 ENABLE_IDN=no
2.Configuration Properties > Linker > Input > Additional Dependencies
ws2_32.lib
wldap32.lib
Crypt32.lib
参考文献:
(1)VS2013配置curl:http://blog.csdn.net/totodum/article/details/51059380
(2)CMake 、 NMake 与 Windows 64 位程序构建:http://blog.csdn.net/icbm/article/details/52904496
(3)Unresolved symbols when linking a program using libcurl:https://stackoverflow.com/questions/4176503/unresolved-symbols-when-linking-a-program-using-libcurl
(4)curl / Download:https://curl.haxx.se/download.html