7
votes

Les bibliothèques C sont distribuées avec compilateurs ou directement par le système d'exploitation?

Selon ma compréhension, les bibliothèques C doivent être distribuées avec les compilateurs. Par exemple, GCC doit distribuer sa propre bibliothèque C et Forte doit être distribuée de sa propre bibliothèque C. Est mon compréhension correcte?

Mais, une bibliothèque utilisateur peut-elle compiler avec le travail de GCC avec la bibliothèque Forte C? Si les deux bibliothèques C sont présentes dans un système, lequel sera invoqué pendant le temps d'exécution?

En outre, si une application est liée à plusieurs bibliothèques, certaines compilées avec GCC et certaines avec Forte, les bibliothèques compilées avec GCC sont automatiquement liées à la bibliothèque CCC C et se comporteront-il également pour FORTE.


0 commentaires

6 Réponses :


7
votes

GCC est livré avec Libgcc, qui inclut des fonctions d'aide à faire des choses comme une longue division (ou même des choses plus simples comme la multiplication sur les processeurs sans instruction multipliée). Il ne nécessite pas de mise en œuvre spécifique de la libc. FreeBSD utilise un BSD dérivé un BSD, GLIBC est très populaire sur Linux et il existe des spéciales pour des systèmes embarqués tels que AVR-LIBC.

Les systèmes peuvent avoir de nombreuses bibliothèques installées (libc et autres) et les règles de sélection de ceux-ci varient en fonction du système d'exploitation. Si vous reliez statiquement, il est entièrement déterminé à la compilation. Si vous associez de manière dynamique, il existe des règles de version et de chemin qui entrent en jeu. Généralement, vous ne pouvez pas mélanger et faire correspondre au moment de l'exécution à cause des bits de la bibliothèque (des en-têtes) qui ont été compilés dans l'exécutable.

Les produits compilés de deux compilateurs doivent être compatibles s'ils suivent tous les deux l'ABI pour la plate-forme. C'est le but de définir des conventions de registre et d'appel spécifiques.


2 commentaires

Cela dit, si je devais télécharger ou acheter un compilateur, je me sentirais trompé si cela ne vient pas à tout le monde avec une sorte de libc, même si je finis par choisir un autre!


Comme je l'ai dit, GCC ne "vient pas avec" Libc. Vous ne pouvez pas non plus lier les programmes avec cela: c'est un compilateur. Un environnement Construire comprend un compilateur, des utilitaires (par exemple, GNU Binutils), des en-têtes, des bibliothèques, etc.



1
votes

Seuls peu de choses de la bibliothèque C sont obligatoires en ce sens qu'ils ne sont pas nécessaires pour un environnement autoportant. Il suffit de fournir ce qui est nécessaire pour les en-têtes xxx

ne met généralement pas en place de nombreuses fonctions qui doivent être fournies.

L'autre type d'environnement est appelé environnement "hébergé". Comme son nom l'indique, supposons qu'il existe une entité qui "héberge" le programme d'exécution, généralement le système d'exploitation. Donc, généralement la bibliothèque C est fournie par cet "environnement d'hébergement", mais comme ben dit, sur différents systèmes, il peut même y avoir des implémentations alternatives.


0 commentaires

3
votes

En ce qui concerne Solaris, vous hypothèse est incorrecte. Étant l'interface entre le noyau et l'US Userland, la bibliothèque C standard C est fournie avec le système d'exploitation. Cela signifie tout ce que vous utilisez (Forte / Studio ou GCC), le même Libc est toujours utilisé. En tout état de cause, les ports rares de la bibliothèque de GNU Standard C (GLIBC) à Solaris sont assez limités et dépourvus probablement trop de fonctionnalités pour être utilisables. http://csclub.uwaterloo.ca/~dtbartle/opensolaris/


0 commentaires

1
votes

forte? C'est vraiment vieux.

Les compilateurs et les outils de développeurs préférés pour Solaris sont tous contenus dans Oracle Solaris Studio. C / C ++ / Fortran avec débogueur, analyseur de performance et IDE basé sur NetBeans et beaucoup de bibliothèques.

http://www.oracle.com/techNetwork/server- Stockage / SolarisStudio / Index.html

C'est (toujours) libre, aussi.


0 commentaires

2
votes

Aucune des autres réponses (encore) mentionne une fonctionnalité importante qui favorise l'interfonctionnement entre compilateurs et bibliothèques - l'interface binaire ABI ou Application. Sur des machines de type UNIX, il existe un ABI bien documenté et les compilateurs C sur le système suivent tous les ABI. Cela permet de beaucoup de mix'n'match. Normalement, vous utilisez la bibliothèque C fournie par le système, mais vous pouvez utiliser une version de remplacement fournie avec un compilateur ou créé séparément. Et normalement, vous pouvez utiliser une bibliothèque compilée par un compilateur avec des programmes compilés par d'autres compilateurs.

Parfois, un compilateur utilise une bibliothèque de support d'exécution pour certaines opérations - peut-être des routines arithmétiques de 64 bits sur une machine 32 bits. Si vous utilisez une bibliothèque construite avec ce compilateur dans le cadre d'un programme construit avec un autre compilateur, vous devrez peut-être relier cette bibliothèque. Cependant, je n'ai pas vu cela comme un problème pendant une longue période - avec pure c.

La liaison C ++ est une question différente. Il n'y a pas le même degré d'interfonctionnement entre différents compilateurs C ++ - ils sont en désaccord sur les détails de la disposition de classe (VTABLES, etc.) et sur la manière dont la manutention des exceptions est effectuée, etc. Vous devez travailler plus fort pour créer des bibliothèques construites avec un compilateur C ++ pouvant être utilisé par d'autres.


0 commentaires

0
votes

Je pense qu'il y a un peu de confusion à propos de termes: une bibliothèque n'est pas la DLL ou .so: Dans le sens réel des langages de programmation, les bibliothèques sont compilées du code que la liaison fusionnera avec notre binaire ( .o). Donc, la liaison (ou le compilateur via certaines directives ...) peut les gérer, mais le système d'exploitation ne peut tout simplement pas être conçu au système d'exploitation.

Nous sommes utilisés pour penser que les OSES sont écrits en C et nous pouvons reconstruire le système d'exploitation à l'aide de GCC / bibliothèques ou similaires, mais C n'est pas Linux / UNIX.

Nous pouvons également avoir un système d'exploitation écrit à Pascal (Mac OS était de cette manière il y a de nombreuses années.) et utilisez des bibliothèques avec notre compilateur C préféré ou un système d'exploitation écrit dans l'ASM (même si ce n'est pas tout, comme dans la première Version Windows), mais nous devons avoir des bibliothèques C pour construire un EXE.


0 commentaires