编译和链接中的 -fopenmp 标志

Jua*_*blo -1 linker compilation openmp

我有这个 openmp 代码

#include <omp.h>
#include <stdio.h>

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

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译、链接并使用-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
Run Code Online (Sandbox Code Playgroud)

代码工作

$ ./bin/main 
thread 0
thread 1
thread 2
thread 3
Run Code Online (Sandbox Code Playgroud)

但当我只将标志放入链接时不要这样做

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
Run Code Online (Sandbox Code Playgroud)

代码可以工作但不能并行

$ ./bin/main 
thread 0
Run Code Online (Sandbox Code Playgroud)

为什么我需要添加-fopenmp编译和链接时间?

Emp*_*ian 5

为什么我需要在编译和链接时添加 -fopenmp ?

因为它在编译时(以启用处理)和链接时(以链接所需的支持库)都是必需的。#pragma omp