一、移植libenvet
1.官网下载源码压缩包地址:https://libevent.org/
2.执行下面命令
tar -zxvf libevent-2.1.11-stable.tar.gz
cd libevent-2.1.11-stable
./configure --disable-openssl --prefix=/usr/ --host=mips-linux-gnu CC=/home/env/mips-gcc720-glibc229/bin/mips-linux-gnu-gcc
make
sudo make install
安装成功后会在安装目录/usr/ 下生成3个子目录 /lib /include /bin
卸载 :sudo make uninstall
./configure
:这是许多开源软件包中的脚本,用于配置软件包的构建选项。--disable-openssl
:表示在编译libevent时不启用OpenSSL支持。--prefix
:指定安装路径为/usr/
目录。--host
:指定交叉编译的主机类型为MIPS架构的Linux系统。CC=
:指定交叉编译使用的C编译器路径。
二、嵌入式设备服务器代码实现
1.为设备添加指定动态链接共享库的路径,/usr/lib下是刚刚编译出来的 lib子目录
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
2.测试代码
#include <event.h>
#include <evhttp.h>
#define BUF_MAX 1024*1024*5
void request_handler(struct evhttp_request *req, void *arg) {
if(req == NULL) {
printf("req is null.");
return;
}
//获取请求的数据
char buf[BUF_MAX] = {0};
size_t data_size = evbuffer_get_length(req->input_buffer);
size_t len = data_size > BUF_MAX ? BUF_MAX : data_size;
memcpy(buf, evbuffer_pullup(req->input_buffer,-1), len);
buf[data_size] = '\0';
if(strlen(buf) > 0) {
printf("request data:%s",buf);
}
//响应客户端
struct evbuffer *ret = evbuffer_new();
if(ret != NULL) {
evbuffer_add_printf(ret,"{\"result\":1,\"success\":true}");
evhttp_send_reply(req,HTTP_OK,"application/x-www-form-urlencoded",ret);
evbuffer_free(ret);
}
}
int main()
{
struct evhttp *http_server = NULL;
short http_port = 8888;
char *http_addr = "0.0.0.0";
//初始化
event_init();
//开启http服务器
http_server = evhttp_start(http_addr,http_port);
//判断是否成功
if(http_server)
{
printf("start success\n\n\n");
}
else{
printf("start failed\n\n");
return -1;
}
//设置请求超时时间(s)
evhttp_set_timeout(http_server,5);
//设置一个通用回调函数,用于处理所有没有特定回调函数的HTTP请求
evhttp_set_gencb(http_server,request_handler, NULL);
//用于设置特定路径的回调
//evhttp_set_cb(http_server,"/getDeviceKey",request_handler,NULL);
//循环监听
event_dispatch();
evhttp_free(http_server);
}
3.编译
-I/usr/include -L/usr/lib -levent