• 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 文件分开编译了。

  • 相关阅读:
    面试背诵版—操作系统
    【洛谷 P1115】最大子段和 题解(贪心算法)
    嵌入式开发套件
    VMware Workstation 15 安装教程
    【公网远程手机Android服务器】安卓Termux搭建Web服务器
    云原生之使用Docker部署BookBrowser电子书浏览器
    为什么账号关联对于卖家来说是非常可怕的
    window.eventBus 在Vue中的使用方法(一)
    Jetson Xavier NX 平台JetPack 5.0.2 版本imx477-stereo camera调试
    百果园再冲刺港交所上市:扩张靠加盟和放贷,余惠勇夫妇为实控人
  • 原文地址:https://blog.csdn.net/tianyexing2008/article/details/126547233