背景

有些情况下,嵌入式设备文件上传需要的网络库不可以太大,诸如 curl 之类的库可能就太大了,好在有一种 libghttp 的库,可以用来发送 http 请求。

编译Libghttp

首先需要安装 libghttp 库到 arm 的系统中。

下载源码:

$ git clone https://github.com/sknown/libghttp.git
$ ./configure

修改Makefile,把gcc修改成自己的交叉编译链,我们采用的是:arm-linux-gnueabihf-gcc,根据您的实际情况修改

all:
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c ghttp.c -o ghttp.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_date.c -o http_date.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_hdrs.c -o http_hdrs.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_req.c -o http_req.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_resp.c -o http_resp.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_trans.c -o http_trans.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_uri.c -o http_uri.o >/dev/null 2>&1
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -fPIC -c http_base64.c -o http_base64.o >/dev/null 2>&1
	arm-linux-gnueabihf-ar cru libghttp.a  ghttp.o http_date.o http_hdrs.o http_req.o http_resp.o http_trans.o http_uri.o http_base64.o
	ranlib libghttp.a
	arm-linux-gnueabihf-gcc -DGHTTP_MAJOR_VERSION=1 -DGHTTP_MINOR_VERSION=0 -DGHTTP_MICRO_VERSION=9 -DPACKAGE=\"libghttp\" -DVERSION=\"1.0.9\" -DSTDC_HEADERS=1 -I. -I. -g -O2 -shared -o libghttp.so ghttp.o http_date.o http_hdrs.o http_req.o http_resp.o http_trans.o http_uri.o http_base64.o

clean:
	rm *.o *.a *.so

 

make

libghttp统译完成,arm-linux-gnueabihf-gcc库奉上.

链接:https://pan.baidu.com/s/1V3-AR2cSi3WW193D3dUAwA 
提取码:8888 

编译Libghttp-qiniu

在网上找一个大哥写的基于libghttp写的七牛库,感谢

git clone https://github.com/jemygraw/libghttp-qiniu.git

修改Makefile,路径根据自己的实际情况来填,我们采用的是交叉编译,所以我们手动指定了库的路径

INCLUDE_PATH=-Ighttp-qiniu -I./libghttp/include -L./libghttp/lib
SOURCE_FILES=\
	ghttp-qiniu/ghttp-qiniu.c\
	main.c

all: $(SOURCE_FILES)
	arm-linux-gnueabihf-gcc -std=c99 -g $^ -o upload $(INCLUDE_PATH) -lghttp

最后编译.