g++编译单个cpp文件的基本命令是g++ hello.cpp -o hello,自动完成预处理、编译、汇编、链接四步;不加-o默认输出a.out,易覆盖混淆,故建议始终显式指定输出名。

能直接编译,但默认输出名是 a.out,不加 -o 很容易覆盖、混淆,建议始终显式指定输出名。
g++ 编译单个 cpp 文件的基本命令
最简命令就是 g++ hello.cpp -o hello。它会自动完成预处理、编译、汇编、链接四步,并生成可执行文件 hello。
常见错误现象:
- 运行时提示
Permission denied:没加./前缀,应运行./hello,而非hello - 找不到
std::cout:源码漏了#include <iostream></iostream>或拼错为<iostram></iostram> - 编译后运行无输出:
main函数末尾少return 0;(C++11 起允许省略,但某些旧环境或严格模式下仍可能出问题)
为什么不用 gcc 编译 cpp 文件
gcc 默认按 C 语言规则链接,不会自动链接 C++ 标准库 libstdc++。如果硬用 gcc hello.cpp -o hello,大概率报错:
undefined reference to `std::cout'
要强行用 gcc,必须手动补上链接选项:gcc hello.cpp -lstdc++ -o hello。而 g++ 内置该行为,更安全、更直接。
注意:g++ 不是 gcc 的“升级版”,它是 GCC 工具链中专用于 C++ 的前端,识别 .cpp 后缀并自动启用 C++ 模式和标准库链接。
常用编译参数及影响
实际开发中,这几个参数几乎必加:
-
-Wall:开启大部分警告。比如变量未使用、隐式类型转换,能提前暴露低级错误 -
-g:嵌入调试信息,否则gdb无法查看变量、单步执行 -
-std=c++17(或c++20):明确指定 C++ 标准。不加时,g++ 可能用较老的默认标准(如c++14),导致新语法报错 -
-O2:仅在发布前加。它优化性能但会打乱代码行号,干扰调试;调试阶段应避免
推荐调试期命令:g++ -Wall -g -std=c++17 hello.cpp -o hello
头文件不在当前目录时怎么处理
如果你的 hello.cpp 里写了 #include "myheader.h",而 myheader.h 在 ./include/ 下,g++ 默认只在当前目录和系统路径(如 /usr/include)找,会报错:
fatal error: myheader.h: No such file or directory
解决方法是用 -I 指定额外头文件路径:g++ -I./include hello.cpp -o hello。多个路径可用多个 -I,如 -I./include -I../common。
注意:-I 和 -iquote 行为不同——前者优先于双引号包含("..."),后者只影响双引号;日常用 -I 就够了。
真正容易被忽略的是:g++ 对空格极其敏感。g++-o hello hello.cpp(-o 和 hello 之间没空格)会被解释成一个选项名,直接报错 unrecognized command line option '-ohello'。所有选项与参数之间必须有空格。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











