centos 7安装libghttp库记录

由于物联网的兴起,其中著名的CoAP协议与http有着千丝万缕的关联,所以想学习一下http。

在网上找了很久关于c语言的http库,其中libghttp很符合我的需求,便开始了学习使用libghttp库之路,期间遇到一些麻烦,在此记录一下如何解决遇到的问题以及学习的过程。

 

首先到libghttp库官方下载地址下载 Libghttp-1.0.9

http://www.linuxfromscratch.org/blfs/view/6.2.0/gnome/libghttp.html

拿到libghttp-1.0.9.tar.gz文件后上传到云服务器(centos 7)

解压后会得到一个libghttp-1.0.9的文件夹,cd进入

执行 ./configure --prefix=/opt/gnome-1.4 && make

 

期间可能会遇到一些错误,如:configure: error: libtool configure failed

解决办法是

cp /usr/share/libtool/config/config.guess ./config.guess

cp /usr/share/libtool/config/config.sub ./config.sub

参考链接:https://blog.csdn.net/joyjj0218/article/details/46797701

继续:
./configure --prefix=/opt/gnome-1.4 && make
安装
sudo make install 

编译dome,gcc xxx.c -o xxx -lghttp

执行 ./xxx 报错 error while loading shared libraries: libghttp.so.1: cannot open shared object file: No such file or directory

可能是centos 7 使用make install 太粗暴了,编译后的库链接文件没有弄到系统库文件夹下,需要重建/etc/ld.so.cache
参考链接:https://blog.csdn.net/David_xtd/article/details/7625626

一、将所有的用户需要用到的库放到/usr/loca/lib

二、在/etc/ld.so.conf.d/目录下新建文件usr-libs.conf,内容是:/usr/local/lib

三、#sudo ldconfig

继续编译,执行,ok

dome源码如下:

GET:

/*
 * libghttp_get.c
 *  http get test
 *  Created on: 2013年10月25日
 *      Author: elesos.com
 */
 
#include 
#include 
#include 
int main(int argc, char **argv)
{
    char *uri = "http://www.elesos.com/%E9%A6%96%E9%A1%B5";
    ghttp_request *request = NULL;
    ghttp_status status;
    FILE * pFile;
    char *buf;
    int bytes_read;
    int size;
 
    pFile = fopen ( "elesos.html" , "wb" );
 
    request = ghttp_request_new();
    if(ghttp_set_uri(request, uri) == -1)
       return -1;
    if(ghttp_set_type(request, ghttp_type_get) == -1)//get
    	 return -1;
    ghttp_prepare(request);
    status = ghttp_process(request);
    if(status == ghttp_error)
    	 return -1;
    printf("Status code -> %d\n", ghttp_status_code(request));
    buf = ghttp_get_body(request);
 
    bytes_read = ghttp_get_body_len(request);
    size = strlen(buf);//size == bytes_read
    fwrite (buf , 1 ,size , pFile );
    fclose(pFile);
    return 0;
}

POST:

int post_test() {
	char szXML[2048];
	char szVal[256];
 
	ghttp_request *request = NULL;
	ghttp_status status;
	char *buf;
	char retbuf[128];
	int len;
 
	strcpy(szXML, "POSTDATA=");
	sprintf(szVal, "%d", 15);
	strcat(szXML, szVal);
 
	printf("%s\n", szXML);		//test
 
	request = ghttp_request_new();
	if (ghttp_set_uri(request, uri) == -1)
		return -1;
	if (ghttp_set_type(request, ghttp_type_post) == -1)		//post
		return -1;
 
	ghttp_set_header(request, http_hdr_Content_Type,
			"application/x-www-form-urlencoded");
	//ghttp_set_sync(request, ghttp_sync); //set sync
	len = strlen(szXML);
	ghttp_set_body(request, szXML, len);	//
	ghttp_prepare(request);
	status = ghttp_process(request);
	if (status == ghttp_error)
		return -1;
	buf = ghttp_get_body(request);	//test
	sprintf(retbuf, "%s", buf);
	ghttp_clean(request);	
	return 0;
}

 

再次感谢各位前辈留写下来的宝贵经验。

你可能感兴趣的:(Linux)