如果链接到 openmp,如何将预编译 headers 与 gcc 一起使用

How to use precompiled headers with gcc if linking against openmp

最小示例:

// file: main.cpp
#include "pch.h"

int main()
{
    std::cout << "test" << std::endl;
    return 0;
}

--

// file: pch.h
#include <iostream>

如果我用

编译它,工作正常并且符合预期
g++ pch.h
g++ main.cpp -Winvalid-pch

但是一旦我将最后一行更改为:

g++ main.cpp -fopenmp -Winvalid-pch

预编译header的使用被禁用:

warning: pch.h.gch: not used because `_REENTRANT' is defined [-Winvalid-pch]

如何在链接到 OpenMP 时仍然使用预编译的 headers?为什么 _REENTRANT 定义与使用预编译 header 完全冲突?

您必须生成 .pch 并使用相同的标志编译源代码。 -fopenmp 意味着 #pragma omp-pthread.

g++ -fopenmp pch.h
g++ main.cpp -fopenmp -Winvalid-pch

或至少

g++ -pthread pch.h
g++ main.cpp -fopenmp -Winvalid-pch