小编Yur*_*kov的帖子

MIPS上pthread中的段错误

我试图在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)

c++ pthreads mips segmentation-fault embedded-linux

5
推荐指数
1
解决办法
289
查看次数

标签 统计

c++ ×1

embedded-linux ×1

mips ×1

pthreads ×1

segmentation-fault ×1