C++ 入门:从源码到可执行文件
C++ 程序不是直接运行源码。通常会经历预处理、编译、汇编和链接几个阶段。
最小程序
#include <iostream>
int main() {
std::cout << "hello, cpp\n";
return 0;
}
main 是程序入口。#include 会引入头文件声明,std::cout 来自标准库。
编译与链接
g++ main.cpp -o app
编译器先把源码翻译成目标文件,再由链接器把目标文件和库组合成可执行文件。
图片来源:Wikimedia Commons,ISO C++ Logo。
常见错误
- 编译错误:语法、类型、声明问题。
- 链接错误:声明存在,但实现找不到。
- 运行错误:程序能运行,但逻辑或内存使用有问题。
我自己的理解
初学 C++ 时,最容易把“写代码”和“运行代码”中间的过程看成黑箱。后来我发现,很多莫名其妙的问题其实都能在编译和链接阶段解释清楚。例如头文件只是声明的集合,真正的实现可能在另一个 .cpp 文件或者库文件里。你在头文件里看到了函数声明,不代表链接器一定能找到它的实现。
写小程序时可以直接 g++ main.cpp -o app,但项目稍微变大后,最好有意识地区分源文件、头文件、目标文件和最终产物。这个习惯会影响后面学习 CMake、静态库、动态库以及第三方依赖管理。
练习
可以准备两个文件:main.cpp 和 math.cpp。先只在 main.cpp 里声明 int add(int, int);,然后故意不编译 math.cpp,观察链接错误。再把两个文件一起编译,看看错误如何消失。
评论
...正在读取评论。