为何-g编译选项会阻止预编译头(PCH)的使用?
预编译stdc++.h加-g调试选项后失效的问题
现象说明
普通编译时,预编译头能正常被调用:
执行编译命令:g++ -H -std=c++17 main.cpp -o main输出日志里的
!表示预编译头bits/stdc++.h.gch正在被使用:! bits/stdc++.h.gch main.cpp加入VSCode常用的
-g调试选项后,预编译头不生效:
执行编译命令:g++ -g -H -std=c++17 main.cpp -o main输出日志里的
x表示预编译头不兼容,g++转而直接编译原头文件bits/stdc++.h:x bits/stdc++.h.gch . bits/stdc++.h ...
问题根源
预编译头的生成和使用必须严格匹配编译参数。你当初生成bits/stdc++.h.gch的时候没加-g选项,后来编译时加了-g,两者的调试信息配置不一致,g++判定预编译头和当前编译环境不兼容,所以就不用它了。
解决办法
- 重新生成带
-g选项的预编译头,命令如下:
这样新生成的预编译头就能适配带g++ -g -std=c++17 bits/stdc++.h-g的编译命令了。 - 可以针对调试和发布两种场景分别生成对应的预编译头,确保每次编译的参数和预编译头生成时的参数完全一致。
内容的提问来源于stack exchange,提问作者Intern
相关产品推荐
相关产品推荐

