环境及准备:
- mongoose源码
- 交叉编译工具
实现过程:
- 修改源码为C 版本
cp mongoose.c mongoose.cc
- 交叉编译 -问题1 -问题2
arm-linux-g mongoose.cc -fPIC -shared -Wno-psabi -lrt -o libmongoose.so
测试过程:
- 使用源码中的 http-server 进行测试, 路径为:
tutorials/http/http-server
- 修改 main.c 为 main.cc
- 编写 CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(test)
set(SO_LIB lib)
link_directories(${SO_LIB})
add_executable(${PROJECT_NAME}
main.cc)
target_link_libraries(${PROJECT_NAME}
mongoose
#rt # 如果动态库编译时没有使用 -lrt 也可以在此处引用
)
- 上传到运行环境并测试
解决问题:
- va_list 警告
解决办法: 加入 -Wno-psabi 编译选项
参考: note: the mangling of 'va_list' has changed in GCC 4.4
- clock_gettime 未定义的引用
解决办法: 编译时加入动态库 librt.so 即在编译命令中加入 -lrt
参考: undefined reference to `clock_gettime' 链接错误的解决思路
总结:
好像大部分C 的网络库都要求C 11, 开发环境没有C 11支持, 于是便使用C语言网络库. 交叉编译后, 动态库只有211KB, 适合嵌入式WEB开发.