如何在GCC中链接OpenMP时正常使用预编译头?
解决OpenMP与预编译头兼容的问题
这个问题的根源很明确:当你添加-fopenmp编译选项时,GCC会自动定义_REENTRANT宏,但你之前生成预编译头pch.h.gch的时候并没有开启这个选项,宏定义的不一致导致编译器判定预编译头无效,所以抛出了那个警告。
要解决这个问题,核心是让预编译头的生成环境和后续源文件的编译环境完全一致,具体操作分两步:
- 生成预编译头时,同样加上
-fopenmp选项,确保预编译头包含_REENTRANT宏的定义:g++ -fopenmp pch.h - 之后编译main.cpp时保持原命令即可:
g++ main.cpp -fopenmp -Winvalid-pch
简单来说,预编译头对编译环境的一致性要求非常严格,宏定义、编译选项这些细节都得匹配,不然编译器会拒绝使用预编译头来避免潜在的编译错误。只要生成预编译头和编译源文件时用完全相同的编译选项(包括OpenMP相关的),就能正常兼顾OpenMP和预编译头的使用了。
内容的提问来源于stack exchange,提问作者user1709708
相关产品推荐
相关产品推荐

