在开始前请先准备好下面的文件:
1. 调试版的libcurl静态库libcurld.lib,可以在网上下载或自己编译;
2. 头文件,curl.h、curlver.h、easy.h、mprintf.h、multi.h、stdcheaders.h、types.h,在官网http://curl.haxx.se/download.html下载curl-7.32.0.zip,并在里面找到这7个头文件。
下面开始简单使用libcurl静态库访问网址,并在控制台输出该网址的页面内容:
1. 打开vc6.0,新建win32 控制台程序,工程名为LibcurlTest
2. 打开工程路径,将静态库libcurld.lib移到该工程路径下
3. 右键工程LibcurlTest->设置-> 连接->输入,在“对象/库模块”里面的末尾添加libcurld.lib,用空格与前面的隔开
4. 打开工程路径,新建include文件夹,在include文件夹下新建curl文件夹,把7个头文件移到curl文件夹中
5. 新建test.cpp, 代码如下:
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
char* content;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
6. 右键工程LibcurlTest-> Header Files->添加文件到目录,添加7个头文件
7. 右键工程LibcurlTest->组建,生成LibcurlTest.exe
8. 执行LibcurlTest.exe,控制台将输出访问http://curl.haxx.se/网址返回的页面内容
组建过程可能出现的错误:
1. Cannot open include file:'curl/curl.h': No such file or directory
这个错误说明编译时没有发现'curl/curl.h'头文件,解决方法:
右键工程LibcurlTest->设置->C/C++->预处理器,在“附加包含路径”下添加include文件夹的路径,这样编译器就可以找到curl文件夹下面的头文件了。
2. errorLNK2001: unresolved external symbol _curl_easy_cleanup
这个说明编译器在链接静态库时发生错误,导致无法解析curl_easy_cleanup函数,请确保前面的第三步配置正确,再来看下函数curl_easy_cleanup的定义:
CURL_EXTERN CURL *curl_easy_init(void);
CURL_EXTERN CURLcode curl_easy_setopt(CURL*curl, CURLoption option, ...);
CURL_EXTERN CURLcode curl_easy_perform(CURL*curl);
CURL_EXTERN void curl_easy_cleanup(CURL*curl);
再找下CURL_EXTERN的定义:
#if defined(BUILDING_LIBCURL)
#define CURL_EXTERN __declspec(dllexport)
#else
#define CURL_EXTERN __declspec(dllimport)
#endif
从这里可以发现少了个宏定义BUILDING_LIBCURL,因为我们需要从静态库里面导出函数,以被其他程序调用,解决方法:
右键工程LibcurlTest->设置-> C/C++->预处理器,在“预处理器定义”下的末尾添加BUILDING_LIBCURL,用逗号与前面的隔开。
3. error LNK2001: unresolvedexternal symbol __imp__WSACleanup@0
少了依赖库Ws2_32.lib,解决方法:
右键工程LibcurlTest->设置-> 连接->输入,在“对象/库模块”里面的末尾添加Ws2_32.lib,用空格与前面的隔开
4. error LNK2001: unresolvedexternal symbol __imp__ldap_unbind_s
少了依赖库Wldap32.lib,解决方法:
右键工程LibcurlTest->设置-> 连接->输入,在“对象/库模块”里面的末尾添加Wldap32.lib,用空格与前面的隔开
5. MSVCRTD.lib(MSVCRTD.dll) :error LNK2005: _calloc already defined in LIBCD.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll): error LNK2005: _realloc already defined in LIBCD.lib(dbgheap.obj)
这是MSVCRTD.lib库与LIBCD.lib发生冲突,解决方法:
右键工程LibcurlTest->设置-> 连接->输入,在“忽略库”里面的末尾添加libcd.lib