Liaison statique du programmeur 4 du programmeur

  • Les variables globales non initialisées seront toujours placées dans la section BSS à la dernière étape ld, mais ne figureront pas dans un seul fichier .o (étant donné que le global peut avoir plusieurs définitions faibles, mais les variables statiques locales non initialisées sont C'est différent, le fichier externe ne l'utilisera certainement pas, donc la taille a été fixée)

Lien statique

  • A encore mentionné ce concept
    • Les fonctions de nombreuses bibliothèques appellent en fait l'API du système d'exploitation (par exemple printf ())
  • Une bibliothèque statique peut simplement être vue comme une collection de fichiers cibles

4.6 Processus de contrôle de connexion

3 méthodes

Insérez la description de l'image ici

fichier .def

  • ld --verboseInsérez la description de l'image ici

Le format après visualisation est le suivant:
Le format de lds n'est pas lu

/usr/lib/gnu–xx/ilbc.a

Insérez la description de l'image ici

  • p 125 assemblage en ligne? ?
  • Table des pages de la table des segments? ?
  • Bibliothèque BFD? ?
  • Bloc COMM? ?

Trivial

Expression régulière

  • Correspondance entre les lignes
    [\ s \ S] * ou [\ w \ W] * ou [\ d \ D] *
  • Gourmand et non gourmand
    Ajouter un après le mode gourmand? Il peut être transformé en non gourmand, par exemple +?, *?
    Notez que la différence entre + et * est uniquement de savoir s'il peut correspondre à zéro fois, les deux étant en mode gourmand

Symbole faible mal défini

  • La fonction de classe définie dans la classe est le symbole de FAIBLE, et la fonction définie en dehors de la classe est GLOBAL (donc la définition forte est GLOBAL? Fondamentalement)
    • La fonction de classe définie dans la classe n'apparaîtra pas dans la table des symboles si elle n'est pas appelée (je pense qu'elle se trouve dans la section .bss)
    • S'il est appelé, c'est un symbole faible (car les fonctions membres de classe définies dans la classe sont des fonctions en ligne par défaut (la plupart du temps pour la plupart des compilateurs))

ref

Nous ne pouvons donc pas définir de fonctions de membre de classe dans le fichier .h et en dehors de la classe, mais nous pouvons définir des fonctions de membre de classe dans le fichier .h et à l'intérieur de la classe!

Parce que l'intérieur de la classe est la fonction inline-> en général, ce sera la
classe de symbole faible et l'extérieur est la définition forte du symbole global.
Plusieurs définitions faibles n'ont pas d'importance, plusieurs définitions fortes sont très problématiques.
Plus de références et de détails @ https: // stackoverflow.com/questions/10754350/why-does-the-ld-linker-allow-multiple-class-definitions-with-the-same-methods/10755605#10755605

  • Mais ce n'est pas recommandé

cy: Inline s'exécutera généralement plus rapidement, mais il ne convient pas pour la compilation de grands projets, car vous changez un emplacement, puis vous devez recompiler tous les emplacements que vous avez achetés, car il est compilé de manière écrasée.

En regardant à nouveau ce passage, ma compréhension est la suivante: cette fonction est définie à l'intérieur des membres de la classe, donc tant que l'implémentation de la fonction change un peu, tous les fichiers c qui incluent ce fichier d'en-tête doivent également être recompilés (équivalent au contenu du fichier C Tout a changé). Il est déclaré dans le fichier xx.h, mais l'avantage défini dans le fichier xx.c est que seul le fichier xx.c doit être recompilé, et les autres fichiers c qui contiennent xx.h n'ont pas besoin d'être modifiés, car le fichier c est en fait Il n'y a qu'une seule adresse déplaçable de la fonction correspondante (cette adresse pointera vers l'adresse de la fonction dans xx.o lorsque le lien vers le fichier xx.o génère main.o), et le contenu du fichier c n'a pas changé.


question

  • Le rôle des variables statiques?

Uniquement valable dans le fichier courant

  • Adressage proche et adressage lointain?
  • Voir page 121
A publié 177 articles originaux · J'aime 28 · Visites 50 000+

Je suppose que tu aimes

Origine blog.csdn.net/Hesy_H/article/details/101033643
conseillé
Classement