如何使用 clang 编译 OpenMP 程序?

如何使用 clang 编译 OpenMP 程序?

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

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

我也安装了libomp5包并将标志更改为-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 特定包和传递相应标志的提示。

答案1

我有同样的问题。

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-dev安装omp.h

/usr/include/omp.h

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

答案2

它似乎omp.h您的系统中不存在该文件小路.首先尝试定位omp.h如果您不知道它在哪里,请归档:

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

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

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

相关内容