树莓派使用std::get_time/strftime解析日期触发SIGABRT
树莓派上使用std::get_time或strftime解析日期字符串触发SIGABRT,但Ubuntu 22.04运行正常
在树莓派上执行使用std::get_time或strftime解析日期字符串的代码时,程序会触发SIGABRT信号终止,但同样的代码在Ubuntu 22.04桌面系统上可以正常运行。
示例代码(std::get_time)
#include <chrono> #include <iomanip> #include <iostream> int main() { std::stringstream stream; stream.str("09:35:44,02-23-2023"); std::tm tm{}; const std::string format = "%H:%M:%S,%m-%d-%Y"; if((stream >> std::get_time(&tm, format.c_str())).fail()) { std::cout << "Parsing failed" << std::endl; } std::cout << std::chrono::seconds(std::mktime(&tm)).count() << std::endl; }
测试环境与问题细节
- 测试过搭载Buster和Bullseye系统的树莓派,均出现该问题
- 尝试查找ARM架构下日期解析的已知问题,但未找到相关内容
补充信息
- 编译方式:使用CLion的gcc工具链配合CMake远程编译,目标为两台树莓派3B(分别为Buster和Bullseye系统),选用系统默认gcc/g++编译器:
- Buster:gcc-8.3.0、CMake3.16
- Bullseye:gcc-10.2.1、CMake3.18.3
- 也曾尝试在Ubuntu上使用
arm-linux-gnueabihf-gcc/g++交叉编译,但出现其他问题
- 调试信息:通过CLion远程gdb调试发现,SIGABRT发生在调用
std::get_time过程中,此时tm结构体的小时、分钟、秒已被正确解析,但程序随即终止 - 后续计划:将在全新配置的树莓派上仅通过命令行编译执行程序,以排除CLion工具链的问题
后续更新
感谢各位的建议和解答。令人遗憾的是,今天再次尝试时,错误无法复现,程序可正常运行,仍不清楚上周操作中出现了什么问题,给大家添麻烦了!
内容的提问来源于stack exchange,提问作者molicious
相关产品推荐
相关产品推荐

