2010-07-08 9 views
3

Je m'interrogeais sur les bibliothèques C standard qui contiennent toutes les fonctions/définitions comme abs(), cout streams, printf, etcBibliothèques pour les choses standard (par exemple: cout, etc) * QUESTIONS NEWBIE * :)

Je connais les fichiers d'en-tête (stdio.h, cmath.h, time.h, etc etc) mais il ne semble y avoir aucun fichier .lib ou .dll correspondant (par exemple, stdio.lib, time). dll, etc).

Où est le code réel pour les fonctions dans ces fichiers d'en-tête? Suis-je en train de mal comprendre quelque chose? Est-ce qu'il y a, un énorme fichier lib qui contient tous les trucs normalisés, ou un pour chaque en-tête?

Toute aide appréciée !!

Merci!

+5

La bibliothèque C standard ne comportera pas de «cout» ou de flux. –

Répondre

4

Cela dépend de l'implémentation. Sous Windows, la fonctionnalité de bibliothèque standard est the C and C++ runtime libraries. La bibliothèque d'exécution C est toujours liée automatiquement; la bibliothèque d'exécution C++ est automatiquement liée si vous incluez l'un des en-têtes de bibliothèque standard.

0

Si vous mentionnez des DLL, je suppose que vous utilisez Windows. Dans ce cas, il y a généralement une DLL "runtime" livrée avec le compilateur. Avec Visual C++, je crois que le nom est msvcrt.dll ou similaire.

+0

Le programme peut utiliser plusieurs DLL. Son nom est msvcr **. Dll, msvcp **. Dll. C'est à dire. msvcr80.dll, msvcr90.dll et ainsi de suite. – SigTerm

2

Vous n'avez généralement pas à lier explicitement les bibliothèques d'exécution C ou C++. Habituellement, le compilateur appellera l'éditeur de liens avec les options correctes pour le faire pour vous.

En fait, avec gcc, vous devez faire quelque chose pour ne pas comprennent les bibliothèques par défaut (telles que l'utilisation -nodefaultlibs, -nostdlib ou -nostartfiles).

L'emplacement réel de la bibliothèque standard, y compris s'il se trouve dans un seul fichier ou non, est un problème d'implémentation.

+1

libgcc n'est pas la bibliothèque standard; C'est un code interne à l'implémentation que gcc utilise pour les longues divisions et autres. La bibliothèque standard est généralement appelée libc. –

3

Si vous utilisez Linux/une variante d'UNIX/AIX, essayez d'utiliser ldd. Juste pour le plaisir d'essayer quelque chose de nouveau tapez ldd `qui est dans votre invite Linux. Voici ce que je suis:

librt.so.1 => /lib/tls/librt.so.1 (0x0084c000) 
libacl.so.1 => /lib/libacl.so.1 (0x40022000) 
libselinux.so.1 => /lib/libselinux.so.1 (0x00289000) 
libc.so.6 => /lib/tls/libc.so.6 (0x00a0b000) 
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c57000) 
/lib/ld-linux.so.2 (0x009ec000) 
libattr.so.1 => /lib/libattr.so.1 (0x40028000) 

Les chemins devraient vous dire où des bibliothèques partagées sont repris. Si vous utilisez Windows, mettre la main sur depends.exe http://www.dependencywalker.com - excellent outil

1

Comme mentionné Arpan, vous pouvez utiliser ldd (qui est dans le paquet «binutils) pour découvrir ce fichier SO est en fait utilisé pour libc. L'implémentation la plus courante sur les systèmes Linux est le GNU C library, généralement appelé glibc.