我的 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