• mongoose 搭建 http 服务 -- 编译


            今天想在公司环境下练习一下 mongoose 搭建 http 服务的代码,下载了 源码 但是编译出现了问题,记录一下。

    1,头文件问题

    找不到 json.h 头文件

    下载下来已经有 json 源码,所以指定一下就可以了,修改 main.cpp,如:

     2,找不到 json 接口问题

    Makefile 里添加库路径及库名称:-L../json -ljson 

     3,没有编译 mongoose.c 问题

    如上图中的 mg_ 开头的函数是在 mongoose.c 里,这个得修改Makefile 了,原先的没有对 mongoose.c 进行编译,添加编译.c的命令:

    4,没有找到 ssl 接口问题

    Makefile 添加 -lssl  

    5,库版本不匹配问题

     libssl.a 和 libssl.so 静态库和动态库是有的,但都是 32 位的

     所以只能编译 32 位的程序了,修改Makefile ,添加编译选项 -m32 可以编译 32 位程序。

    1. CC = gcc -m32
    2. CPP = $(CROSS)g++ -std=c++11 -m32

    6,json 库找不到的问题

    json库明明是有的,结果一看是 64 位的

     编译 32 位 json 库也很简单,修改其目录下的 Makefile,添加编译选项 -m32 即可编译出 32 位的库了。

    再在 Makefile 里修改链接的库名: -ljson32。最终的 Makefile 为:

    1. #中间文件存放目录,如.o 和 .d 文件
    2. COMPILE_DIR = compile
    3. BIN_DIR = bin
    4. # 可编译arm版本
    5. #CROSS = arm-himix200-linux-
    6. CC = gcc -m32
    7. CPP = $(CROSS)g++ -std=c++11 -m32
    8. CFLAGS = -Werror -g
    9. LIB =-L../json -ljson32 -lpthread -lssl -lcrypto
    10. # SRCS = $(wildcard *.cpp)
    11. CPP_SRCS = $(shell ls -t | grep "\.cpp$$" | head -1)
    12. CPP_OBJS = $(patsubst %.cpp, $(COMPILE_DIR)/%.o, $(CPP_SRCS))
    13. CPP_DEP = $(patsubst %.cpp, $(COMPILE_DIR)/%.cpp.d, $(CPP_SRCS))
    14. C_SRCS = mongoose.c
    15. C_OBJS = $(patsubst %.c, $(COMPILE_DIR)/%.o, $(C_SRCS))
    16. C_DEP = $(patsubst %.c, $(COMPILE_DIR)/%.c.d, $(C_SRCS))
    17. OBJS = $(CPP_OBJS) $(C_OBJS)
    18. DEP_ALL = $(CPP_DEP) $(C_DEP)
    19. $(shell if [ ! -d $(COMPILE_DIR) ]; then mkdir $(COMPILE_DIR); fi)
    20. $(shell if [ ! -d $(BIN_DIR) ]; then mkdir $(BIN_DIR); fi)
    21. TARGET=$(BIN_DIR)/$(BIN)
    22. all: $(TARGET)
    23. -include $(DEP_ALL)
    24. $(TARGET): $(OBJS)
    25. $(CPP) $(CFLAGS) $^ -o $@ $(LIB)
    26. $(COMPILE_DIR)/%.o: %.cpp $(COMPILE_DIR)/%.cpp.d
    27. $(CPP) $(CFLAGS) -c $< -o $@
    28. $(COMPILE_DIR)/%.cpp.d: %.cpp
    29. $(CPP) $(CFLAGS) -MM -E -c $< -o $@
    30. @sed 's/.*\.o/$(subst /,\/,$(dir $@))&/g' $@ > $@.tmp
    31. @mv $@.tmp $@
    32. $(COMPILE_DIR)/%.o: %.c $(COMPILE_DIR)/%.c.d
    33. $(CC) $(CFLAGS) -c $< -o $@
    34. $(COMPILE_DIR)/%.c.d: %.c
    35. $(CC) $(CFLAGS) -MM -E -c $< -o $@
    36. @sed 's/.*\.o/$(subst /,\/,$(dir $@))&/g' $@ > $@.tmp
    37. @mv $@.tmp $@
    38. .PHONY: clean
    39. clean:
    40. rm -rf $(COMPILE_DIR) $(BIN_DIR)

     Makefile 主要是将 c 和 cpp 文件分开编译了。

  • 相关阅读:
    一篇文章教会你搭建Hive分布式集群
    SpringSecurity6 | 委派筛选器代理和过滤器链代理
    北京化工大学数据结构2022/10/20作业 题解
    rust编程初探-猜数游戏(chapter 2)
    【pytest官方文档】解读- 如何安装和使用插件
    如何在您的 Weblogic 应用程序上配置 HTTPS SSL?
    程序被加载到进程的哪个位置?
    CANoe-如何基于CAN协议在诊断控制台诊断通信(5000字保姆级教程)
    Python的get请求报错Error: Unexpected status code 400
    创建comfyui自定义节点
  • 原文地址:https://blog.csdn.net/tianyexing2008/article/details/126547233