我有这个openmp代码
#include <omp.h>
#include <stdio.h>
int main()
{
#pragma omp parallel
{
fprintf(stderr, "thread %d\n", omp_get_thread_num());
}
return 0;
}
当我编译并链接并使用-fopenmp
gcc-6 -std=c99 -Wall -Wextra -pedantic -fopenmp -Iinclude -c -o build/main.o src/main.c
gcc-6 -o bin/main build/main.o -fopenmp
代码工作
$ ./bin/main
thread 0
thread 1
thread 2
thread 3
但是,当我只将标志放在链接
中时,请不要这样做gcc-6 -std=c99 -Wall -Wextra -pedantic -Iinclude -c -o build/main.o src/main.c
src/main.c: In function 'main':
src/main.c:6:0: warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
#pragma omp parallel
gcc-6 -o bin/main build/main.o -fopenmp
代码工作但不是并行
$ ./bin/main
thread 0
为什么我需要在编译和链接时添加-fopenmp
?
答案 0 :(得分:2)
为什么我需要在编译和链接时添加-fopenmp?
因为在编译时需要两个(以启用#pragma omp
处理)和链接时(链接所需的支持库)。