Il linkage ha senso solo per variabili globali.
Quelle interne alle funzioni non centrano niente, visto che sono locali appunto.
Se dichiari una variabile globale in un file .c o .cpp. quella variabile ha linkage interno visto che nessun altro modulo sa che esiste.
Per renderla visibile al mondo devi mettere la dichiarazione in un file .h.
In questo modo però ogni modulo che includerà quel .h si ritroverà un duplicato di quella variabile.
Per evitare questo si antepone extern che in sostanza dice al linker:

Attento: questa variabile esiste ma si trova in un solo file .c o .cpp. Tu quando componi i file oggetto per creare l'eseguibile e incontri extern quel che è, non fare il linking subito ma aspettati di trovare la definizione vera e propria della variabile da un'altra parte.

Questo è il linkage esterno.