Files
printer-driver/docs/cheatsheet.md
T
2026-09-30 11:49:39 +02:00

3.7 KiB

Chuleta de comandos

Comandos que hemos usado, agrupados por tarea. Los flags del proyecto son -std=c17 -Wall -Wextra -Wpedantic -g.

Compilar paso a paso

Comando Qué hace
gcc -E -Iinclude src/escpos.c -o build/escpos.i Solo preprocesa. Genera el .i: C con los .h pegados.
gcc -S ... Para después de compilar. Genera el .s (ensamblador).
gcc <flags> -Iinclude -c src/escpos.c -o build/escpos.o Compila hasta el .o (fichero objeto), sin enlazar.
gcc <flags> -c build/escpos.i -o build/escpos.o Compila partiendo de un .i. No hace falta -I.
gcc <flags> -Iinclude -save-temps -c src/escpos.c Cadena completa, conservando .i, .s y .o.
gcc build/hello.o build/escpos.o -o build/hello Enlaza los .o en un ejecutable.
./build/hello Ejecuta un programa de la carpeta actual.

Si juntas dos flags de parada (-E -S), gana la que para antes.

Inspeccionar ficheros

Comando Qué hace
nm build/hello.o Lista símbolos: T definido y visible, t definido y static, U usado pero definido en otro sitio.
wc -l fichero Cuenta líneas (por ejemplo, para comparar .c y .i).
ls -l build/ Muestra la fecha de modificación: sirve para ver qué .o está obsoleto.
file fichero Dice qué es: ELF (Linux), COFF o PE (Windows)...
strings fichero.o Muestra las cadenas legibles que hay dentro de un binario.
objdump -d fichero.o Desensambla el código máquina.
objdump --dwarf=info fichero.o Muestra la información de depuración que añade -g.
xxd fichero.bin Volcado hexadecimal (para revisar los bytes ESC/POS).
tail -c 5 fichero | xxd Muestra los últimos bytes: sirve para ver si el fichero acaba en 0a (\n).
echo $? Código de salida del último comando: 0 es éxito.

Solo en Windows (MSYS2)

Comando Qué hace
objdump -p hello.exe | grep "DLL Name" Lista las DLL de las que depende el ejecutable.
strip hello.exe Quita símbolos e información de depuración.
gcc -static ... Enlaza estáticamente todas las librerías posibles.

Make

Comando Qué hace
make Construye el primer objetivo del Makefile.
make build/escpos.o Construye un objetivo concreto.
make CC=clang Sobrescribe una variable del Makefile para esta ejecución. No recompila lo que ya está al día.
make clean Borra lo generado (si el Makefile tiene esa regla y está en .PHONY).
touch fichero Actualiza la fecha del fichero sin cambiar su contenido. Make lo verá como modificado.
cat -A Makefile Muestra los caracteres invisibles: ^I es un tabulador y $ es el fin de línea.

Errores típicos y qué significan

Mensaje Quién lo da Causa
fichero.c:línea:col: error: Compilador Error en el código fuente.
undefined reference to 'x' Enlazador (ld, collect2) Un U sin ninguna T: falta pasar un .o o una librería.
multiple definition of 'x' Enlazador Dos T con el mismo nombre. A menudo, un cuerpo de función en un .h.
missing separator Make La receta empieza por espacios en vez de tabulador.
'x' is up to date Make No es un error: el objetivo es más nuevo que todos sus prerrequisitos. Si x es una acción (clean), falta en .PHONY.
no newline at end of file Clang El fichero no termina en \n.

Go equivalente

Go C
go build -x Ver los comandos que se ejecutan por dentro.
go build -work Conservar los intermedios (como -save-temps).
go build -ldflags="-s -w" Quitar símbolos (como strip).