如果链接到 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
最小示例:
// 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