如何让g++12优先使用标准头文件而非嵌入式系统旧头文件
解决g++12优先使用自带标准头文件的方案
下面是几个实用的解决办法,帮你避开嵌入式目录里的旧gcc头文件:
用
-idirafter替代-I指定嵌入式头文件目录
这是最省心的方案。-idirafter会把指定的目录放在系统标准头文件目录之后搜索。也就是说,当代码里写#include <iostream>时,g++12会先去自己的标准库目录找,找不到才会去你指定的嵌入式目录里找,完美跳过旧版本的头文件。
编译命令示例:g++12 -idirafter <embedded header dir> your_source.cpp -o output显式指定g++标准头文件目录并放在搜索顺序最前面
先找到g12的标准C头文件路径,执行以下命令查看:g++12 -print-search-dirs | grep c++找到类似
/usr/lib/gcc/x86_64-linux-gnu/12/include/c++这样的路径,然后把它用-I放在嵌入式目录前面:g++12 -I /path/to/g++12/c++/include -I <embedded header dir> your_source.cpp -o output这个方法的缺点是不同系统的标准头文件路径可能不同,移植性稍差,但胜在直接。
清理嵌入式目录中的旧标准头文件
如果嵌入式目录里的旧gcc头文件(比如iostream、iostream.h、fstream这类)和嵌入式自有头文件混放,你可以直接把这些旧标准头文件移走或者重命名(比如改成iostream_old.h),这样g++12就只会找到自己的标准头文件了。不过这个方法需要修改嵌入式目录的文件,如果你不想改动原目录的话,优先用前两个方法。
另外注意:如果旧代码里用了<iostream.h>这种非标准的头文件名,现代g++是没有的,这时候你可能需要手动创建一个空的iostream.h或者在里面#include <iostream>来兼容,但这属于额外的兼容处理,和本次问题的优先级调整无关。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

