最近工作当中遇到了mongoose,主要是用它作为web服务器,在嵌入式设备上使用,用于pc web客户端与设备端数据交互。这里不介绍mongoose本身,只记录编译mongoose过程中遇到的问题,及使用实例,测试使用的是postman工具。
1,源码下载与编译
源码在github上也有,这是我自己的上传的源码,在这里
编译过程遇到的问题:
原因为没有链接ssl,编译选项添加:-lssl
添加链接库:-lcrypto
2,实例
这里将mongoose编译成了so动态库,与实例一起编译和使用。
int main()
{
struct mg_mgr mgr;
mg_mgr_init(&mgr, NULL);
struct mg_connection *con = mg_bind(&mgr, "8189", ev_handler);
mg_set_protocol_http_websocket(con);
int times = 30;
while (times-- > 0)
{
mg_mgr_poll(&mgr, 1000);
sleep(1);
}
mg_mgr_free(&mgr);
return 0;
}
以上只是main函数,下载的源码里有完整的例子。
3,测试
用的是postman工具进行测试,实例运行如下:
4,Makefile
CC = g++ #arm-himix200-linux-gcc
CFLAGS = -Wall -g#-Wl,--wrap=fopen
INCLUDE = -I../json/include
LIB = -L../json/lib -lpthread -lssl -lcrypto -ljsoncpp
SRC = main.cpp
OJB = $(SRC:.cpp=.o)
DEP = $(OJB:.o=.cpp.d)
SO_LIBARAY = libWebServer.so
ifneq ($(target),)
TARGET = $(target)
else
TARGET = a.out
endif
All: $(SO_LIBARAY) $(TARGET)
include $(DEP)
$(TARGET): $(OJB)
$(CC) $(CFLAGS) $^ -o $@ ./$(SO_LIBARAY) $(LIB)
$(OJB) : $(SRC)
@$(CC) $(INCLUDE) $(CFLAGS) -c $< -o $@ $(LIB)
#编译动态库
$(SO_LIBARAY): mongoose.o
gcc $(CFLAGS) -shared $< -o $@ $(LIB)
mongoose.o: mongoose.c mongoose.h
gcc $(CFLAGS) -fPIC -c $< -o $@ $(LIB)
%.cpp.d: %.cpp
@$(CC) $(CFLAGS) -MM -E $^ > $@
clean:
rm -rf $(OJB) $(TARGET) $(SO_LIBARAY) $(DEP) mongoose.o
makefile中把mongoose编译成了动态库,且同时使用了json库,上面的下载路径下也有json库,可自行下载编译。若不需要使用json可以修改makefile不指定头文件及链接json库。