In questo video parleremo degli errori del linker e del perché possono verificarsi.
Gli errori del linker si verificano quando il linker cerca di mettere insieme tutti i pezzi di un
programma per creare un eseguibile e uno o più pezzi mancano.
In genere, ciò può accadere quando un file oggetto o delle librerie non vengono trovati dal linker.
La correzione degli errori del linker può essere complicata.
A volte si tratta solo di correggere i percorsi in modo che il linker sappia dove sono
i pezzi mancanti.
Passiamo a code light e forziamo un programma ad avere un errore del linker, in modo da poter vedere l'aspetto
del messaggio di errore.
Il codice di esempio è qui, ignorate la sintassi.
Questo è in realtà codice C plus plus, ma è comunque rilevante per gli errori del linker.
Non preoccupatevi dell'i o stream.
Non preoccupatevi di stdcout.
L'idea principale è che gli errori di collegamento sono gli stessi in C e C plus plus.
E l'esempio di codifica qui riportato vuole solo dimostrare ancora una volta un errore del linker.
Sono in code light e ho creato un progetto chiamato Linker Error, basato sul modello che usiamo.
Quindi tutto ciò che ho è un Main. cpp che dice Hello world.
Ora forzeremo un errore del linker.
Non è un'operazione da fare normalmente, ma voglio farlo per mostrare l'aspetto dell'errore.
Quindi, quello che dirò sarà extern int c o diciamo semplicemente X e vi spiegherò tutto questo
in un secondo.
E poi nel corpo della pagina principale, voglio provare a usare quella X proprio lì.
È solo un numero intero e diciamo che voglio stamparlo.
Voglio solo stampare X, semplicemente.
Lo conserverò.
Ora vedrete che se compilo questo programma, vedrete cosa succede.
Faccio clic con il pulsante destro del mouse su Compila.
Ottengo una compilazione pulita.
Non c'è nulla di sbagliato nel programma, ma quando cerco di costruirlo ed eseguirlo.
È possibile vedere l'errore del linker.
Si tratta di un classico errore del linker.
Riferimento indefinito a qualcosa.
In questo caso si dà il caso che sia x.
Inoltre, si noterà che il linker ha restituito uno qui.
LD restituisce uno, che è lo stato di uscita.
Quindi c'era qualcosa di sbagliato nel link.
Ovviamente il compilatore era a posto, perché non si sono verificati errori di compilazione.
Lo facciamo di nuovo.
C'è la compilazione.
Nessun errore, nessun avviso.
Lasciate quindi che vi spieghi cosa sta succedendo.
Lasciate che prenda il mio stilo qui, velocemente.
Qui ho il mio file CPP principale, che verrà compilato in main dot zero, diciamo, o
main dot object.
Qui abbiamo un riferimento a un EXE.
Lo si può vedere proprio lì.
Qui ho un riferimento a un exe, che utilizzerò.
Ora abbiamo anche le nostre librerie O stream, quindi il linker deve prenderle e io digiterò i o stream
per farvi capire di cosa sto parlando.
Il linker deve mettere insieme questi due elementi per creare l'exe principale.
In questo caso credo si tratti di un errore del linker exe.
Ma sapete cosa intendo.
Quindi la compilazione va bene.
Abbiamo creato il nostro file oggetto.
Questa biblioteca esiste.
Il problema è che ho detto al compilatore che questa x non è in me.
È da un'altra parte.
È definito da qualcun altro.
Beh, ovviamente non è definito da qualcun altro, perché in questo modo si è forzato il problema.
Quindi ora il linker deve risolvere quella X, dicendo: "Ok, dove posso trovare quel valore da stampare?
Perché è quello che mi hai chiesto di fare qui, giusto?
Voglio che stampi il valore di x.
Dove si trova x?
Non riesce a trovarlo.
Questo è l'errore del linker.
È esattamente quello che sta succedendo.
E vorrei costruire di nuovo questo file, in modo che possiate vedere il messaggio di errore un'altra volta.
Si tratta di costruirlo e farlo funzionare.
Ed ecco il messaggio di errore.
Dice che il riferimento a X è indefinito.
Si può vedere esattamente cosa sta succedendo.
Non riesce a trovare X.
Non si tratta di un errore del compilatore.
Si tratta di un errore del linker.
Questo è davvero importante da capire.
Gli errori del linker sono difficili da risolvere.
Spesso i file da collegare sono mancanti.
Sono nei posti sbagliati.
In questo corso non dovrete preoccuparvi di usare il codice light, in pratica faremo
tutto da soli.
Ma se si utilizzano librerie di terze parti, questo è il genere di cose di cui parleremo in un corso più
intermedio o avanzato.
Ma volevo solo mostrarvi gli errori del linker nel caso ve ne capitasse uno, postatelo nel forum
e lo risolveremo insieme.