必须先用g++编译C++源文件生成可执行文件再运行,不能直接解释执行;常见问题包括未安装编译器、缺少./前缀、main函数缺失或签名错误、文件编码含BOM、多文件未全部编译等。

编译前确认你有 g++ 或 clang++
没有编译器,g++ 命令根本跑不起来。macOS 默认没装 g++,Windows 也没原生支持——得先装好工具链。
常见情况:
- macOS:装 Xcode Command Line Tools(运行
xcode-select --install)或 Homebrew 装gcc - Windows:推荐用
MinGW-w64(装完确保g++.exe在 PATH 里),或者用 WSL 跑原生 Linux 工具链 - Linux(如 Ubuntu):通常预装
g++,没装就sudo apt install g++
验证是否就位:g++ --version 能打出版本号才算过关。
写完 .cpp 文件后,用 g++ 编译出可执行文件
C++ 不是解释型语言,不能像 Python 那样直接 python main.cpp。必须先编译成二进制,再运行。
立即学习“C++免费学习笔记(深入)”;
最简流程:
- 写个
hello.cpp,内容含int main()函数 - 终端进入该文件所在目录,执行:
g++ hello.cpp -o hello -
-o hello指定输出的可执行文件名(不加这参数默认叫a.out) - 然后运行:
./hello(注意前面的./,否则系统只在 PATH 里找,找不到你刚生成的)
常见错误:command not found: hello —— 就是因为漏了 ./。
遇到 “undefined reference to `main’” 怎么办
这个错误不是语法错,是链接阶段失败,核心原因只有一个:你的源文件里没有合法的 main 函数。
检查这几处:
-
main拼错了,比如写成maim或Main - 函数签名不对:
int main()或int main(int argc, char* argv[])才有效;void main()是非标准写法,g++会拒绝 - 文件编码含 BOM(尤其 Windows 记事本保存的 UTF-8),可能让编译器看不见
main—— 改用 VS Code、Notepad++ 等工具另存为 “UTF-8 无 BOM” - 多个
.cpp文件但只编译了一个(比如g++ a.cpp,而main()其实定义在b.cpp中)—— 正确做法是g++ a.cpp b.cpp -o app
想跳过手动编译?可以用 Makefile 或 CMake,但别现在依赖它
初学时硬记 g++ xxx.cpp -o yyy 比折腾构建系统更实在。很多教程一上来推 CMakeLists.txt,结果连 g++ 报什么错都看不懂。
等你能稳定编译单文件、理解 -I(头文件路径)、-L(库路径)、-l(链接库)这些参数之后,再碰构建工具才不晕。
眼下最该盯住的,其实是 ./ 这两个字符——它太小,也最容易被忽略。


















