关于thread使用的错误:pure virtual method called terminate called without an active exception

简介: 关于thread使用的错误:pure virtual method called terminate called without an active exception

今天遇到一个问题,错误提示如下:

pure virtual method called
terminate called without an active exception

在网上搜了下,查到的问题原因大多数纯虚函数调用的问题。我程序里确实有纯虚函数调用,但是子类已经将其实现了,并且在调用时,也实例化了子类,没有查到匹配答案。只能进一步查找问题,加调试信息。


还有个比较奇怪的现象,我用gdb去运行程序,想单步跟一下,可以是用gdb运行时,却有不出问题了!


只能通过加日志来查了,最后查到是在这一个地方出问题的:

m_taskThreat = thread(&CXXX::XXXX, this);

也就是创建线程时出问题的,这个thread是c++11后引入的线程类,可能是当前的编译器不支持导致的。


这个程序在虚拟机(Ubuntu16.04系统)下是可以正常运行的。


板子上的编译器是:

Using built-in specs.
COLLECT_GCC=arm-hisiv500-linux-gcc
COLLECT_LTO_WRAPPER=/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin/../libexec/gcc/arm-hisiv500-linux-uclibcgnueabi/4.9.4/lto-wrapper
Target: arm-hisiv500-linux-uclibcgnueabi
Configured with: ../gcc-linaro-4.9-2015.06/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --target=arm-hisiv500-linux-uclibcgnueabi --prefix=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/arm-hisiv500-linux --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=armv5te --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --enable-nls --enable-clocale=gnu --enable-extra-hisi-multilibs --with-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/arm-hisiv500-linux/target --with-build-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/arm-hisiv500-linux/target --with-gmp=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-mpfr=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-mpc=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-ppl=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-cloog=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --enable-libgomp --disable-libitm --disable-libsanitizer --enable-poison-system-directories --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv500-linux/gcc-uclibc/install/host_lib --with-pkgversion=Hisilicon_v500_20180120 --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
Thread model: posix
gcc version 4.9.4 20150629 (prerelease) (Hisilicon_v500_20180120) 


从编译器信息里可以看出,这个编译器是uclibc, uclibc是经过裁剪的c库,这个编译器可能不支持c++11的thread类;


替换为posix 的thread api创建线程测试是可以的。


问题解决了。

目录
相关文章
|
Ubuntu Linux 编译器
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
3018 0
|
Java API 网络性能优化
NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
报错日志: java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy at ch.
11643 0
|
10月前
|
存储 JSON 数据格式
什么情况,一夜之间冲上热搜,狂揽29.6k星,再见吧SQLite!这个嵌入式分析引擎实在太香了
DuckDB是一款嵌入式OLAP数据库,专为高效分析型查询设计,被誉为“分析型SQLite”。它采用列式存储和向量化查询引擎,显著提升分析任务性能。无需独立服务器,支持Python、R、Java等语言,安装简单,5分钟即可上手。DuckDB可直接查询CSV、JSON、Parquet文件,支持Pandas零拷贝交互,优化SQL语法简化复杂查询。适用于探索性数据分析、数据湖ETL流水线及边缘设备实时分析等场景,是数据科学家和开发者的理想工具。项目地址:https://github.com/duckdb/duckdb
1124 4
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
24576 3
LabVIEW 在运行时初始化数组并允许用户编辑值
LabVIEW 在运行时初始化数组并允许用户编辑值
525 0
|
存储 持续交付 开发工具
clang-format
clang-format
1443 7
|
数据采集 存储 人工智能
AI时代数据湖实践
本文分享了如何利用阿里云的存储解决方案构建一个具备高效处理、高时效性的AI数据湖,通过高吞吐训练和高效推理帮助企业快速实现数据价值,以及用户在使用中的最佳实践。
1658 3
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
13245 2
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】PCA 主成分分析算法过程及原理讲解
主成分分析(PCA)的原理和算法过程。
1541 0
|
编解码 算法 程序员
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(三)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
383 0

热门文章

最新文章