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;
}