多文件编译与链接
每个 .cpp 单独编译成 .o 目标文件 → 链接器合并并解析跨文件符号引用 → 可执行程序
源文件 .cpp
目标文件 .o(分别编译)
链接器 linker
可执行程序
main.cpp
#include "util.h"
int main(){
cout<<
add
(2,3);
}
调用 add,只见声明
util.cpp
#include "util.h"
int
add
(int a,int b){
return a+b;
}
给出 add 的定义
编译
g++ -c
编译
g++ -c
main.o
符号表 symbols
add
未定义 ✗
→ 向外部寻找定义
util.o
符号表 symbols
add
已定义 ✓
→ 对外提供该符号
绑定到定义
符号解析 ✓
链接器
ld / linker
合并目标文件
解析符号引用
绑定调用↔定义
链接
app
可执行文件
main + util
符号已就位 ✓
▶ 重播