如何使用clang编译OpenMP程序?


9

我的gcc编译良好,但是clang失败并显示以下消息:

clang -fopenmp=libomp -o main main.c
main.c:5:10: fatal error: 'omp.h' file not found

我还安装了libomp5package并将flag更改为-fopenmp=libomp5,尽管它也没有帮助:

clang -fopenmp=libomp5 -o main main.c
clang: error: unsupported argument 'libomp5' to option 'fopenmp='
clang: error: unsupported argument 'libomp5' to option 'fopenmp='

这些建议没有用。

感谢您安装必要的16.04特定软件包并传递相应标志的提示。


您正在使用什么版本的Clang?我在Ubuntu 16.10上使用clang-3.8和clang-3.9遇到相同的问题。
Z玻色子

1
sudo apt install libomp-dev
Z boson

最后,我可以在Ubuntu上将OpenMP与Clang一起使用!我想要这个很久了!
Z玻色子

Answers:


16

我有同样的问题。

sudo apt install libomp-dev

已在Ubuntu 16.10中修复

//test.c
#include "omp.h"
#include <stdio.h>

int main(void) {
  #pragma omp parallel
  printf("thread %d\n", omp_get_thread_num());
}

然后

clang test.c -fopenmp
./a.out
thread 0
thread 5
thread 2
thread 1
thread 7
thread 3
thread 4
thread 6

clant-3.9 test.c -fopenmp

作品。


GCC和Clang分别使用不同的OpenMP运行时库:libgomp和libomp。

Clang的运行时是LLVM OpenMP运行时,而该运行时又基于Intel OpenMP运行时(它是开源的)。 https://www.openmprtl.org/

在我的系统上,GCC安装omp.h

/usr/lib/gcc/x86_64-linux-gnu/6/include/omp.h

libomp-devinsalled omp.h

/usr/include/omp.h

这些是不同的头文件,其中包含不同的功能定义。例如,可以使用任何一个头文件都可以,omp_get_wtime()但总的来说,我认为使用与链接到的运行时相对应的头文件可能更好。


1
在香草16.04上使用带回购的股票lang语。
Bulat M.

1
我刚刚安装了默认为Clang 4.0的Ubuntu 17.04。我仍然不得不使用sudo apt install libomp.dev
Z玻色子

如果您不小心从clang 6链接了libgomp,您的代码将被静默序列化。
Andrew Wagner

2

看来omp.h文件在您的系统PATH中不存在。如果您不知道它在哪里,请首先尝试找到omp.h文件:

find / -name 'omp.h' -type f

然后运行以下命令来编译您的代码:

clang -o main main.c -I/path/to/omp/folder

那不能解决问题。它仍然找不到omp.h
Z玻色子

您在系统中找到任何omp.h吗?您可以将这些命令的输出附加到您的问题吗?
Ghasem Pahlavan

*.h是头文件,为什么他要将它们添加到他的路径中?他们应该在/usr/include例如。
Ravexina

1
感谢Ghasem,在16.04上的libomp-dev安装已解决。
Bulat M.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.