我试图在MIPS Linux机器上运行我的代码(小端,没有硬件浮动):
# cat /proc/cpuinfo | grep model
cpu model : MIPS 24Kc V5.5
Run Code Online (Sandbox Code Playgroud)
我的程序在x86和ARM系统上运行良好,但由于MIPS上的分段错误而崩溃,总是在(或附近)pthreads库函数调用中发生。我尝试了两种工具链(MTI GNU / Linux的工具链MIPS32R2-MIPS32R5从这里和的Sourcery Codebench完成精简版2016.05-8从这里) -细节略有不同,但段错误总是发生。
阅读邮件列表,我发现pthreadsMIPS平台上的分段错误有两个原因:
pthread_unlock_mutex()和pthread_wait_cond()在uClibc里的MIPS版本。但是我使用glibc(尽管设备上的操作系统是基于uClibc的)。pthreads; 但是我的程序是静态链接的。我写了一个非常简单的程序:
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
void sayHello() {
this_thread::sleep_for(chrono::seconds(2));
cout << "Hello world!" << endl;
}
int main(int argc, char* argv[]) {
thread t(sayHello);
t.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它也会在MIPS上崩溃。在带有断点的调试器中,t.join()我看到以下内容:
(gdb) c
Continuing.
Breakpoint 1, __start …Run Code Online (Sandbox Code Playgroud)