libcurl源码编译及使用

1:源码编译libcurl 7.21以后的版本在Windows下的编译比较简单,自带了MinGW和VC环境的Makefile文件,首先去Curl官网下载源代码:http://curl.haxx.se/download.html,任选一个下载即可,推荐这个: curl-7.21.2.tar.gz,下载完成后解压开,打开命令行进入curl源码目录,(在此之前请先设置好MinGW的环境变量):
摘要由CSDN通过智能技术生成

1:linux下源码编译

./configure --prefix=/usr/local/curl --disable-shared --enable-static --without-libidn --without-ssl --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6

注意:不需要其它功能就disable,不然会在连接时报错 如果你没有disable掉,但你的机器上又没有安装相应的库,link时会报错。


2:windows下源码编译

libcurl 7.21以后的版本在Windows下的编译比较简单,自带了MinGW和VC环境的Makefile文件,首先去Curl官网下载源代码:http://curl.haxx.se/download.html,任选一个下载即可,推荐这个: curl-7.21.2.tar.gz,下载完成后解压开,打开命令行进入curl源码目录,(在此之前请先设置好MinGW的环境变量):
cd curl-7.21.2
编译libcurl库文件:
cd lib
make -f Makefile.m32
等待编译完成即可
(若需编译生成curl可执行文件,则执行:
cd ../src
make -f Makefile.m32)

编译完成后,我们需要复制include头文件和库文件到一个目录供程序开发用
1. 新建curllib目录
2. 新建curllib/include目录,将源代码include目录里的curl文件夹复制到curllib/include目录,这些是使用libcurl需要的头文件
3. 新建curllib/lib目录,将源代码lib目录里编译好的库文件libcurl.a,libcurldll.a,libcurl.dll复制到curllib目录
4. 将MinGW安装目录下lib文件夹里的libwldap32.a和libws2_32.a复制到curllib/lib目录

至此,curllib就是我们开发中要使用到的libcurl的全部文件,下面新建一个测试程序main.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "./curllib/include/curl.h"

size_t callback_write_file(void *ptr, size_t size, size_t nmemb, void *userp)
 {
    //fprintf(stdout,"size=%d\n",size);
    fwrite(ptr,size,nmemb,(FILE *)userp);
    return size * nmemb;     //必须返回这个大小, 否则只回调一次, 不清楚为何.
 }

 void *func_download_file(FILE *fp)
 {
    CURL *curl = NULL;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, "http://10.255.64.30:8082/20140225/vt/01B5CE3D7366577E5A85179BCAC742C9.8BB4DB74.8d8c8a829de211e3aae200266cf463ac"); //设置下载的URI
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);        //设置超时
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);        //屏蔽其它信号
    //curl_easy_setopt(curl, CURLOPT_HEADERDATA, 1);      //下载数据包
    //curl_easy_setopt(curl, CURLOPT_RANGE, "0-500");     //用于断点续传, 设置下载的分片

    //char buffer[MAXHEADLEN] = {0x0};
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback_write_file); //设置下载数据的回调函数
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

    res = curl_easy_perform(curl);
    if(res != CURLE_OK)
    {
        fprintf(stdout,"curl execute fail\n");
    }
    curl_easy_cleanup(curl);
    curl_global_cleanup();
    return 0;
 }

int main()
{
    FILE *fp = fopen("./kaka","wb");
    if(!fp)
    {
        fprintf(stdout,"fopen fail \n");
    }
    func_download_file(fp);
    fclose(fp);
    return 0;
}

方法一、命令行编译使用licurl的程序
假设测试代码curltest.c位于e:/project
假设curllib文件夹的位置为c:/curllib
命令行运行下列命令编译这个测试程序:
cd e:/project
gcc -I. -Ic:/curllib/include -g -O2 -DCURL_STATICLIB -c main.c
gcc  -o main.exe

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值