macOS HighSierra下C++程序编译错误求助(gcc 5.3.0)
嘿,碰到Mac上编译C++的坑太正常了,我来帮你一步步捋清楚怎么解决~
先搞明白你用的到底是哪个g++
Mac系统自带的gcc/g++其实是Apple clang的“马甲”,为了兼容才起的同名。你装的gcc5.3.0可能没被优先调用,先确认下:
在终端敲这个命令,看看输出的版本是不是你装的5.3.0:
g++ --version
如果输出里是Apple LLVM version之类的,说明你还是在用系统自带的版本。这时候得调整环境变量,把你装的gcc的bin目录放到系统路径前面:
比如你是用Homebrew装的gcc5.3.0,路径大概是/usr/local/Cellar/gcc/5.3.0/bin/,那打开你的shell配置文件(比如~/.bash_profile或者~/.zshrc,看你平时用哪个shell),加这么一行:
export PATH="/usr/local/Cellar/gcc/5.3.0/bin:$PATH"
然后执行source ~/.bash_profile(对应你编辑的那个文件)刷新一下,再重新查版本,确认是gcc5.3.0的g++就对了。
检查你的编译命令和代码
版本没问题的话,看看编译命令是不是正确。比如编译test.cpp生成可执行文件test,命令应该是:
g++ test.cpp -o test
如果你的代码用了C++11或者更高版本的特性(比如auto、lambda这些),记得加上对应的编译参数:
g++ -std=c++11 test.cpp -o test
gcc5.3.0对C11支持很完整,要是用了C14的特性就换成-std=c++14。
重置Xcode命令行工具避免冲突
你已经装了命令行工具,但有时候系统路径关联可能出问题,试试重置一下:
sudo xcode-select --reset
这个命令会让系统重新关联正确的命令行工具路径,避免和你手动装的gcc打架。
要是还不行,把错误信息贴出来哈
如果上面的步骤都试了还是报错,把编译时弹出的完整错误信息贴出来——比如是头文件找不到?语法报错?还是链接阶段出错?不同的错误原因不一样,比如头文件找不到可能是g++路径没配对,链接错误可能是需要额外加系统库的链接参数。
内容的提问来源于stack exchange,提问作者Commoner

