/usr/bin/ld: file.o: undefined reference to `my_function` – C UNDEF_REF_SYMBOL

UNDEF_REF_SYMBOL

Il codice compila correttamente la dichiarazione della funzione, ma in fase di link finale ld non trova il file oggetto .o o la libreria .a/.so che contiene il corpo effettivo della funzione.

Cosa significa questo errore?

Il codice compila correttamente la dichiarazione della funzione, ma in fase di link finale ld non trova il file oggetto .o o la libreria .a/.so che contiene il corpo effettivo della funzione.

Messaggio originale

/usr/bin/ld: file.o: undefined reference to `my_function`

Contesto e parole chiave

Alias

  • undefined reference to symbol ld C

Messaggi alternativi

  • simbolo o funzione indefinita nel link

Prodotti

  • GCC / Clang / MSVC / GDB

Piattaforme

  • Linux
  • macOS
  • Windows

Parole chiave

  • c.linker.undefined-reference-to-symbol
  • errore-c-undefined-reference-to-symbol
  • linguaggio-c
  • Linker ed Oggetti ld

Cause possibili

Causa tecnica per Errore C Linker: undefined reference to `symbol` (Simbolo Non Definito nel Link)

Il codice compila correttamente la dichiarazione della funzione, ma in fase di link finale ld non trova il file oggetto .o o la libreria .a/.so che contiene il corpo effettivo della funzione.

molto comune

Diagnosi

Diagnostica di compilazione o memoria per Errore C Linker: undefined reference to `symbol` (Simbolo Non Definito nel Link)

Compilare con flag di warning rigorosi (-Wall -Wextra -pedantic) e analizzare eventuali crash con AddressSanitizer o GDB.

Come leggere il risultato. Evidenzia warning precisi a tempo di compilazione ed esegue l'intercettazione dei memory error a runtime.

terminal
gcc -Wall -Wextra -pedantic -fsanitize=address -g main.c -o app

Risoluzione

Risoluzione standard per Errore C Linker: undefined reference to `symbol` (Simbolo Non Definito nel Link)

Difficoltà: mediaRischio: basso

Applicare la correzione al codice sorgente C secondo le buone pratiche di gestione memoria e prototipi.

  1. Ispezionare la riga segnalata dal compilatore o l'indirizzo del crash
  2. Correggere la gestione dei puntatori, firme delle funzioni o flag del linker
  3. Ricompilare e verificare l'assenza di memory leak con Valgrind o ASan
terminal
gcc -Wall -Wextra main.c -o app

Domande frequenti

Come risolvere l'errore Errore C Linker: undefined reference to `symbol` (Simbolo Non Definito nel Link) in C?

Il codice compila correttamente la dichiarazione della funzione, ma in fase di link finale ld non trova il file oggetto .o o la libreria .a/.so che contiene il corpo effettivo della funzione.

Approfondimenti

Schede correlate