libcurl交叉编译及使用

cmake

1) ./configure --without-ssl CC=/home/share/hflbs/prebuilts/aarch64-rockchip-linux-gnu/bin/aarch64-rockchip-linux-gnu-gcc --prefix=/home/share/libcurl/BB --host=aarch64-rockchip-linux-gnu

2) make 

3) make install

编写CmakeLists.txt

#cmake最低版本需求,不加入此行会受到警告信息
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(libcur_test) #项目名称

set(CMAKE_SYSTEM_NAME Linux)

MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")  
MESSAGE(STATUS "operation CMAKE_SYSTEM_NAME is ${CMAKE_SYSTEM_NAME}")  

set(tools /home/share/hflbs/prebuilts/aarch64-rockchip-linux-gnu)
set(CMAKE_C_COMPILER ${tools}/bin/aarch64-rockchip-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-rockchip-linux-gnu-g++)

include_directories(/home/share/libcurlDemo/include)

LINK_DIRECTORIES(/home/share/libcurlDemo/lib)
#把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST
AUX_SOURCE_DIRECTORY(. SRC_LIST)

ADD_EXECUTABLE(libcur_test ${SRC_LIST})

target_link_libraries(libcur_test  curl)

//curl_helper.h

#ifndef _CURL_HELPER_H
#define _CURL_HELPER_H
#include <stdio.h>

#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
int downloadFile(char url, char path);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif
#include <stdio.h>
#include <string.h>

#include "curl/curl.h"

static int g_nPersent = 0;

size_t write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
	return fwrite(ptr, size, nmemb, stream);
}

int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
	g_nPersent =  (int)(0.05+ 100.0*dlnow / dltotal);
	
	return 0;
}

int downloadFile(char *url, char *path)
{
	CURL *curl;
	CURLcode res;
	FILE *outfile;

	curl = curl_easy_init();
	if (curl)
	{
		outfile = fopen(path, "wb");
		
		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_func);
				curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
		curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
		curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);

		res = curl_easy_perform(curl);

		if (res != CURLE_OK)
		{
			printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
		}
			
		fclose(outfile);
		curl_easy_cleanup(curl);
	}
	if (res != CURLE_OK)
	{
		printf("down error.\n");
		return -1;
	}
	return 0;
}

main.c

#include <stdio.h>
#include <string.h>

#include "curl/curl.h"

static int g_nPersent = 0;

size_t write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
	return fwrite(ptr, size, nmemb, stream);
}

int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
	g_nPersent =  (int)(0.05+ 100.0*dlnow / dltotal);
	
	return 0;
}

int downloadFile(char *url, char *path)
{
	CURL *curl;
	CURLcode res;
	FILE *outfile;

	curl = curl_easy_init();
	if (curl)
	{
		outfile = fopen(path, "wb");
		
		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_func);
				curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
		curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
		curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);

		res = curl_easy_perform(curl);

		if (res != CURLE_OK)
		{
			printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
		}
			
		fclose(outfile);
		curl_easy_cleanup(curl);
	}
	if (res != CURLE_OK)
	{
		printf("down error.\n");
		return -1;
	}
	return 0;
}


int main()
{
	downloadFile("http://192.168.12.156:8000/update.img", "/tmp/update.img");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值