在 Windows 上编译(安装)和使用 libcurl

参考于此原文


最近要在 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 <stdio.h>
#include <curl/curl.h>

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/



阅读更多
个人分类: windows编程 C/C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭