参考于此原文
最近要在 Windows 上使用 libcurl 库,编译过程中遇到了不少的麻烦,现将其总结如下,和朋友们分享,希望能给后来者以帮助。
整个过程分为以下几步:
第一步:下载最新版本的 curl,可以到 http://curl.haxx.se/download.html 下载。我下载的是 curl-7.21.2.zip;
第二步:编译源代码,生成可用于其他程序的 dll 文件和 lib 文件;
第三步:在程序中使用。
我分别在 MSVC6.0 和 VS 2008 下进行了编译和使用,下面分别进行总结:
1. MSVC6.0:
(1) 根据页面 http://curl.haxx.se/docs/install.html 的介绍,如果用 VC6.0 进行编译的话,得需要有 February 2003 Platform SDK,也叫 Windows Server 2003 PSDK。但是根据上述页面提供的链接,并不能找到该 SDK。通过在网上查找,最终在一个 FTP 站点 ?ftp://ftp.seu.edu.cn/ 的目录 /Pub/Develope/SDK_DDK_DRV/04.09.03-Windows.Server.2003.Platform.SDK.Feb.2003.Edition-QUANTUM/ 下面找到了所谓的最后一个支持 VC6.0 的 SDK。下载之后,通过解压缩 qtm-wsdk.rar 可以得到两个文件,其中较大的一个文件是用于安装 SDK 的。用虚拟光驱软件或 WinMount 进行一下映像就可以进行安装了。我用 WinMount 软件得到如下图所示的文件:
本来以为下面就可以顺利安装了,但是当我双击 Setup.Exe 文件运行的时候,又出现下面的提示信息:
通过阅读信息得知是因为自己把默认浏览器设置为了 Google 浏览器,修改完之后,双击 Setup.Exe 又相继出现以下几个(错误)信息:
下面两个是在第一个中选择了“允许阻止的内容”之后出现的。对于这两个错误信息最终没有找到解决方法。那怎么安装 SDK 呢?
最终采取的方法是进入第一幅图中的 setup 目录,按需安装里面的 *.msi 文件(根据系统是32位还是64位而定),顺序无关紧要。
终于把 SDK 安装好了,在进入编译阶段之前,需要按照 “开始”-> “所有程序”->“Microsoft Platform SDK February 2003”->“Visual Studio Registration”->“Register PSDK Directories with Visual Studio” 这个顺序注册下环境变量。
(2) 这里有两种编译方法:命令行环境 和 IDE 环境
a) IDE 环境:按照页面 http://curl.haxx.se/docs/install.html 的介绍进行操作即可;
b) 命令行环境:进行 lib 目录,编写如下所示的 bat 文件:
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS2.BAT"
set CFG=debug-dll
nmake -f Makefile.vc6
然后双击运行即可。如果仍然提示需要 February 2003 Platform SDK,则需要对该目录下面的 Makefile.vc6 进行如下修改:
Find
CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL
set as
CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL /I "C:\Program Files\Microsoft SDK\include"
其中红色部分是 SDK 中 include 文件夹的安装路径。
编译成功后会在文件夹 debug-all 下面生成 libcurld_imp.lib 和 libcurld.dll 两个文件和其他无用文件。这些是 debug 版本的,如果想编译 release 版本的,只需将上面的 bat 文件中的 debug 改为 release。
下面在 VC6.0 里写一个小程序测试一下:
(3) 在程序中使用
a)准备目录结构如下图所示:
/include/curl 中的内容复制于下载到的 curl 中相应目录的内容(都是一些头文件,makefile 可以删掉);/lib 中的内容就是上面生成的 libcurld_imp.lib 和 libcurld.dll;
b) 在 VC6.0 中建立一个控制台应用程序(Win32 Console Application),并在其中编写如下代码:
#include
#include
int main( void ) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if( curl ) {
curl_easy_setopt( curl, CURLOPT_URL, "www.baidu.com");
res = curl_easy_perform( curl );
curl_easy_cleanup( curl );
}
return 0;
}
c) 通过 VC6.0 中的 Tools/Options/Directories 添加上面的 include 和 lib 文件夹的路径;再通过 Project/Settings/Link 添加 libcurld_imp.lib;
d) 编译整个程序并执行,如果提示找不到 libcurld.dll,就将该文件复制到生成的可执行文件的目录下面,重新执行就可以看到在 stdout 上面输出百度首页的网页代码。至此,在 VC6.0 下面使用 libcurl 抓取网页大功告成!
2. VS2008:
这里因为没有相应的工程文件,只能采用在命令行环境下进行编译的方法,只需将上面编写的 bat 文件中 vcvars32.bat 的路径和需要使用的 makefile 文件进行一下修改即可,debug 版本的 bat 文件如下所示:
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
set CFG=debug-dll
nmake -f Makefile.vc9
编译成功之后,剩下的工作和在 VC6.0 下面基本差不多,这里就不再详述了。
参考资料:
1. http://lun3322.3322.org/post/24.html
2. http://blog.csdn.net/wangqis/archive/2008/08/02/2757947.aspx
3. http://curl.haxx.se/libcurl/c/