我正在编写一个用于 BeagleBone Black 的基于事件的编程库,但遇到了一个奇怪的错误。
当我用完全相同的标志编译完全相同的代码时,我在基于 ARM 的处理器上收到以下错误,但在我运行为我的 x86 计算机编译的代码时却没有。
$ ./missionControl
pure virtual method called
pure virtual method called
pure virtual method called
terminate called recursively
terminate called recursively
Aborted
当我在笔记本电脑上编译和运行时,程序运行正常。
这是我用来编译的命令(ish,我使用的是 Makefile,但两种编译方法都表现出完全相同的行为):
g++ -std=gnu++11 -pthread -O3 -D_GLIBCXX_USE_NANOSLEEP -o missionControl `find . -name *.cpp`
不管我是在实际 BeagleBone 上与 Ubuntu 交叉编译arm-linux-gnueabi-g++
还是与 ARM 兼容,我仍然会在 ARM 上遇到错误。g++
我的问题是:什么可能导致此错误,我可以做些什么来尝试找到源?为什么对于相同版本的 G++,这种情况会发生在一种处理器架构上,而不是另一种?
谢谢!
这是来自 ARM 处理器的 GDB 的回溯:
#0 0xb6d4adf8 in raise () from /lib/libc.so.6
#1 0xb6d4e870 in abort () from /lib/libc.so.6
#2 0xb6f50ab4 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/libstdc++.so.6
#3 0xb6f4ea4c in ?? () from /usr/lib/libstdc++.so.6
#4 0xb6f4ea4c in ?? () from /usr/lib/libstdc++.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)