c++项目使用drogon框架提供Resful API在CPU ARM架构下崩溃问题

不要在一棵树上吊死。这个框架不行,就换一个。

一、崩溃

我们有个c++项目,需要对外提供接口。之前的办法是采用drogon框架作为支持,在x86机器下,不管是windows还是linux,一直运行得不错。但将这个程序移植到CPU为ARM架构的工控机中,如果访问其中的接口,程序就崩溃、退出了。

Segmentation fault (core dumped)

经调试,接口已经成功访问,里面的逻辑都执行完毕了。看上去就是系统在处理后续的工作出了问题。跟具体的接口没有关系,就算是访问一个最简单的,返回“Hello World!”信息的GET方式接口都会导致崩溃。观察了许久,程序也没有内存泄露的问题。

调试过程中,程序崩溃前,报这个信息:

Thread 3 "DrogonIoLoop" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ff66b5c40 (LWP 487506)]
__GI___libc_free (mem=0x13) at malloc.c:3102
Execute debugger commands using "-exec <command>", for example "-exec info registers" will list registers in use (when GDB is the debugger)

后来写了一个最简单的程序,最大限度减少干扰,报这样的信息:

free(): double free detected in tcache 2
Aborted (core dumped)

意思就是重复释放资源。那么到底是哪里出了问题?巨大的进度压力之下,我也崩溃了。

二、纠结

这个事处理起来有点纠结。原因是,drogon依赖openSSH,但运行我们程序的工控机,出厂时就预装了一个低版本的openSSH,drogon依赖的就是这个低版本。而我项目中用到了mysql connector,它也依赖openSSH,但依赖的版本比较高,并且它将这个高版本的openSSH跟它所用的类库放在一起。编译的时候,系统就警告说,可能会有冲突。但也能运行。AI就说,这个应该跟崩溃有关。

但也不好升级系统预装的openSSH吧,这是一个基础类库,升级了的话,万一整个工控机都不可用了咋办,指不定会出什么幺蛾子。所以我就一遍遍地问AI,一整天都耗在如何引导drogon去使用mysql自带的高版本openSSH了。AI的回答总是四平八稳,面面俱到。有些情况已经明确告诉它不用考虑了,但它还是一遍又一遍地提示这种可能性。好啰嗦啊,看着心累。

我钻进了牛角尖。一天下来,整个人都懵了,也没有解决问题。

三、醒悟

后来我想明白了。我问AI,除了drogon,还有别的框架能提供RESTful API吗?“太有了”,AI说,给我推荐了好几个。我找它要了一个最简单,最轻量的,结果运行起来,啥事没有。
在这里插入图片描述

#include "httplib.h"

int main() {
    // 创建HTTP服务器对象
    httplib::Server server;

    // 定义路由处理函数
    server.Get("/", [](const httplib::Request& req, httplib::Response& res) {
        // 设置响应内容
        res.set_content("Hello, World!", "text/plain");
    });

    // 启动服务器,监听指定端口
    server.listen("localhost", 8080);

    return 0;
}

四、总结

不要迷信AI。自从有了AI以后,我就很少上搜索引擎了。搜索引擎要自己搜,甄别,琢磨,AI直接给答案。万事通,啥都懂。但是,它也不是万能的。如果一个问题,重复问题问它几遍,都不能解决,我看就可以放弃了。它喜欢一本正经的胡说八道,不懂装懂。

另外就是不要在一棵树上吊死,既然代码没有问题,那应该就是框架的原因。换吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值