GCC 6.3.0编译含iostream的Hello World程序出现标准库头文件报错
解决方案
- 首先确认编译时调用的GCC路径与环境变量配置正确
RHEL 6.4默认自带GCC 4.4版本,直接执行g++可能优先调用系统默认版本,与你安装的6.3版本头文件冲突。执行以下命令临时配置环境变量,确保调用的是你安装的版本:
配置完成后执行export PATH=/public/software/compiler/gcc-6.3.0/bin:$PATH export LD_LIBRARY_PATH=/public/software/compiler/gcc-6.3.0/lib64:$LD_LIBRARY_PATH export CPLUS_INCLUDE_PATH=/public/software/compiler/gcc-6.3.0/include/c++/6.3.0:/public/software/compiler/gcc-6.3.0/include/c++/6.3.0/x86_64-unknown-linux-gnu:$CPLUS_INCLUDE_PATHwhich g++确认输出为/public/software/compiler/gcc-6.3.0/bin/g++,再重新编译测试。 - 排查宏污染与头文件覆盖
检查当前目录下是否存在和标准库同名的头文件(比如iostream.h、bits目录等),是否在编译参数中添加了自定义宏定义,是否设置了CPATH等环境变量引入了第三方头文件路径,上述情况都可能导致标准库头文件被覆盖、宏定义被篡改,引发预处理语法错误。 - 手动指定头文件搜索顺序测试
如果环境变量配置后仍报错,编译时添加参数手动指定头文件优先级,避免默认搜索顺序混乱:
注意上述路径中的g++ -nostdinc++ -I/public/software/compiler/gcc-6.3.0/include/c++/6.3.0 -I/public/software/compiler/gcc-6.3.0/include/c++/6.3.0/x86_64-redhat-linux -I/usr/include helloworld2.cpp -o helloworld2cppx86_64-redhat-linux需要替换为你GCC 6.3安装目录下include/c++/6.3.0/中实际存在的架构目录名称。 - 重新编译安装GCC 6.3.0
如果上述操作均无效,说明你当前安装的GCC 6.3.0本身编译构建存在问题。在RHEL 6.4上编译GCC 6.3需要提前安装对应版本的gmp、mpfr、mpc、isl依赖库,编译时使用独立的构建目录,配置参数参考如下:
编译完成后再重新安装测试即可。../gcc-6.3.0/configure --prefix=/public/software/compiler/gcc-6.3.0 --enable-languages=c,c++ --disable-multilib --with-native-system-header-dir=/usr/include
内容的提问来源于stack exchange,提问作者Yi Han
相关产品推荐
相关产品推荐

