7
votes

Comment un compilateur C trouva-t-il que -lm pointe vers le fichier libm.a?

Qu'est-ce que les fichiers de la programmation C à Linux? Est le fichier de bibliothèque?

To merge with the math library libm.a you would type

 cc -o program_name prog.c -lm

when you compile the program. The -lm means: add in libm. If we wanted to add in the socket library libsocket.a to do some network programming as well, we would type

 cc -o program_name prog.c -lm -lsocket

and so on. 


1 commentaires

Cool. Avec votre question, vous avez déjà répondu à ma question: "Qu'est-ce qui se tient à la ligne de commande de la Compiler de C compiler?"


3 Réponses :


3
votes

.A Les fichiers sont bibliothèques statiques , par opposition à .so fichiers qui sont des bibliothèques dynamiques. Normalement, GCC recherche des bibliothèques dynamiques si disponibles, sauf réception -Static .

L'en-tête contient des définitions dont le compilateur a besoin afin de créer le code source dans un fichier d'objet, mais les bibliothèques contiennent les routines réelles que le lieur doit transformer le fichier d'objet en exécutable.


0 commentaires

12
votes

Comme Ignacio dit, les fichiers .a sont des bibliothèques statiques. Le "A" signifie "archives" et .a Les fichiers sont construits par un programme nommé "AR".

Chaque fichier .a contient une ou plusieurs fichiers .O et un index des noms. Pendant le processus de liaison, seuls les fichiers .O contenant des noms utilisés sont inclus dans le programme final. C'est ainsi que, au lieu d'inclure toute la bibliothèque C, seules les fonctions utilisées comme "printf" sont copiées.

Comment le compilateur trouve-t-il les bibliothèques? Il possède une collection intégrée de chemins de bibliothèque recherchés. Par exemple, GCC vous indiquera ses chemins de recherche si demandé: xxx

Vous pouvez ajouter plus de chemins de recherche de bibliothèque à l'aide de l'option "-L / chemin".

Dans ces chemins, il cherche d'abord des "bibliothèques dynamiques" qui sont nommées par une extension ".so". Il cherche ensuite des bibliothèques statiques avec une extension ".a". Il ajoute toujours "lib" à l'avant du nom.


0 commentaires

1
votes

Le compilateur "sait" à rechercher libm.a (ou libm.so) lorsque vous le transmettez l'option -LM , car c'est la manière dont l'option -l est documenté et mis en œuvre: prenez les caractères suivants -l (ici juste m ), préfixe lib et suffixe .a . > Pour obtenir libm.a

Chaque bibliothèque peut avoir sa propre relation entre les fichiers d'en-tête et de bibliothèque utilisées. Il est rare que le fichier d'en-tête ne nécessite aucune bibliothèque, mais il est plus courant qu'une bibliothèque ait plusieurs fichiers d'en-tête.


0 commentaires