无法用 openmp 编译

Posted

技术标签:

【中文标题】无法用 openmp 编译【英文标题】:Cannot compile with openmp 【发布时间】:2015-01-26 10:16:14 【问题描述】:

omp.cpp

#include <iostream>
#include <omp.h>

int main() 
  std::cout << "Start" << std::endl;
  #pragma omp parallel
  
    std::cout << "Hello ";
    std::cout << "World! " << std::endl;
  
  std::cout << "End" << std::endl;

我尝试使用g++ omp.cpp -fopenmp 编译上述代码,但出现错误:

c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpthread

collect2.exe: error: ld returned 1 exit status

我试过谷歌搜索 -lpthread 是什么,但我找不到任何东西。我发现的最接近的是另一个线程,其中有人像这样编译他/她的代码:g++ omp.cpp -fopenmp -lpthread ...但结果对我来说是一样的。

我错过了什么吗?非常感谢提前。

【问题讨论】:

可能重复:Using openmp on windows with mingw. Cannot find -lpthread 现在可以使用了。 cplusplus.com/forum/general/154524 【参考方案1】:

pthread 是 POSIX 线程库。-lpthread 是链接器参数,这意味着您正在尝试将二进制文件与 pthread 链接。

该错误表示此库在您的操作系统上不可用。

您似乎在 Windows 上使用 mingw。 毫不奇怪 pthread 在 Windows 上不可用,因为它是一个 POSIX 库。

但您可能会在 MinGW 网站上找到一些方法: http://www.mingw.org/wiki/pthreads_library

看来您必须安装一个名为 pthreads-win32 的第三方库:https://sourceware.org/pthreads-win32/

【讨论】:

非常感谢。所以我已经下载了'pthreads-w32-1-10-0-release.tar.gz',但我不知道放在哪里。我是否将此文件夹放入我的 MinGW 文件夹中?也许这问得太多了,但我真的是这个领域的新手。 你应该在 mingw 中有一个 'lib' 或 'usr/lib' 目录,以及其他库。尝试将 pthread 放在这里,因为此目录可能位于链接器搜索路径中。 不幸的是,这不起作用。我现在尝试了几件事,但没有一个有效。只是为什么这个东西如此复杂。无论如何,我现在不想在评论部分发送垃圾邮件。尽管如此,我还是感谢您的努力。

以上是关于无法用 openmp 编译的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:无法使用 openmp 编译 mex(未定义的参考)

读取文件时无法使用 OpenMP 获得加速

用 ISPC 编译器编译 OpenMP 程序

运行openmp需要安装啥软件?

openMP 没有并行线程

无法理解 OpenMP 代码中的一些意外行为