Toolchain y Linking
gcc main.c esconde cuatro programas y una montaña chica de convenciones. Esta rama los
abre: preprocess → compile → assemble → link, qué contiene un object file, cómo el
linker resuelve símbolos, el formato ELF, linking estático vs dinámico y el loader que
mapea todo eso en un proceso corriendo. Después viene la mitad de disciplina:
gdb/lldb, sanitizers (ASan/UBSan/TSan) y valgrind — las herramientas que convierten
"crasheó" en un diagnóstico preciso.
Linking es donde se encuentran separate compilation, bibliotecas y el loader. Entendelo y "undefined reference" / "symbol not found" dejan de ser misterios.
Notas planificadas
- El pipeline: preprocess → compile → assemble → link
- Object files y qué tienen adentro
- El formato ELF (sections, segments, headers)
- Símbolos: definición, referencia y resolución
- Static linking y archives (
.a) - Dynamic linking y shared libraries (
.so) - El dynamic loader, relocation, PLT y GOT
- gcc vs clang y el modelo de compiler driver
makey el grafo de dependencias de buildcmake(cuando make no alcanza)- gdb / lldb esenciales para debugging de bajo nivel
- Sanitizers: ASan, UBSan y TSan
- valgrind y profilers (perf, cachegrind)
Fuentes núcleo
- John Levine — Linkers and Loaders — la columna de esta rama.
- Ian Lance Taylor — Linkers (serie de 20 partes) — cómo funciona realmente un linker, desde el autor de gold. lwn.net/Articles/276782
- Ulrich Drepper — How To Write Shared Libraries — dynamic linking en profundidad. akkadia.org/drepper/dsohowto.pdf
- David Drysdale — Beginner's Guide to Linkers — la rampa de entrada amable. lurklurk.org/linkers/linkers.html
- ELF specification; docs de sanitizers de Clang (clang.llvm.org/docs); manual de GDB (sourceware.org/gdb).
Conecta con: Assembly y Salida del Compilador · C desde el Metal · OS desde Cero