Bonjour tlm.
Quelle est la différence entre linkage externe et linkage interne lors d'un processus de compilation ordinaire?
Bonjour tlm.
Quelle est la différence entre linkage externe et linkage interne lors d'un processus de compilation ordinaire?
je connaissais pas ces termes mais je suppose que :
- linkage interne permet de linker toutes les fonctions que tu as écrite (si tu as plusieurs fichiers pour ton projet)
- linkage externe permet de linker toutes les fonctions déjà écrites que tu utilise (genre les fonctions de stdio ou stdlib par ex)
mais au fait, pourquoi cette question?
'Linkage' est un terme anglais (lien).
C'est un problème lié à la portée.
Une fonction ou un objet avec lien interne n'est visible que de l'unité de compilation courante.
C'est le cas des objets (définis hors d'un bloc) et des fonctions qualifiés 'static'.
Une fonction ou un objet avec lien externe est visible de n'importe quelle unité de compilation, du moment que l'on fourni les déclarations nécessaires.static int x;
static int f(void)
{
}
C'est le cas des objets (définis hors d'un bloc) et des fonctions non qualifiés 'static'.
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include "declarations.h" int x; int f(void) { }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 /* declarations.h */ extern int x; int f(void); /* ou extern int f(void); */
bon j'ai revu mes sources et j'obtient ça (je sais pas si sa va être plus clair que ce qu'a dit Emmanuel)
- linkage interne : ça permet de linker une librairie dans ton programme (en général une librairie statique, qui ne risque pas de changer)
- linkage externe : en général si une librairie est partagée, on rentre dans ce cas
Par exemple, un programme peut très bien utiliser une lib partagée qui sera sujet au linkage externe. Si jamais cette librairie peut évoluer, mais que des bugs peuvent survenir, on va choisir de faire un linkage interne. dans ce cas la lib va être directement placée au sein du programme qui ne dépendra plus de la lib paratgée (programme généré plus lourd)
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
En fait, Emmanuel, qu'es-ce que tu entends dire par "l'unité de compilation courante". Est ce que dans un même IDE, il existe plusieurs unités de compilation à la fois?!
merci pour l'éclaircissement
Partager