这几天从 github mongoose 下载了 mongoose 的最新代码,然后想用这份代码搭建 mqtt 客户端,然而在编译的时候出现了一些错误,记录如下:

因为这个是源码是 mongoose.c C文件,编译器用的是 cc,然而用 cc 编译时,是不支持 for 循环里定义变量的,C++才支持。错误信息里提示,添加编译选项 -std=c99 也可以支持 for 循环里定义变量,但又会出现新问题。于是在目录mongoose/examples/mqtt-client 下的 Makefile 里添加了编译选项 -std=c99 后,编译,新的错误如下:

提示函数 clock_gettime(CLOCK_REALTIME, &ts); 里的 CLOCK_REALTIME 未定义。man 一下clock_gettime(), 看到需要 #include <time.h>,然后查看 mongoose.h 里,头文件包含都是用宏控制的,看最开头位置有这些定义:
<

博主在尝试使用github上mongoose的最新源码构建mqtt客户端时遇到编译错误,原因是cc编译器不支持在for循环中定义变量。通过添加-std=c99编译选项虽能解决此问题,但又引入了新的错误,即找不到CLOCK_REALTIME定义。解决方法是不使用-std=c99选项并修改源码。最终,虽然在公司网络下无法连接mqtt服务器,但在家庭环境中成功运行并展示了运行结果。此外,还展示了MQTT.fx图形客户端与不同mqtt服务器的连接测试情况。
最低0.47元/天 解锁文章

2万+

被折叠的 条评论
为什么被折叠?



