La différence entre les deux.un.o et.fichier lo

Quelle est la différence entre .a .o et .lo fichier en C?

56
demandé sur Tom Brito 2011-05-05 13:45:35

3 réponses

Le".lo ' file est un objet de bibliothèque , qui peut être intégré dans une bibliothèque partagée, et le '.o' est un fichier standard de fichier de l'objet

The .le fichier lo est l'objet libtool , que Libtool utilise pour déterminer quel fichier objet peut être intégré dans une bibliothèque partagée

29
répondu DumbCoder 2014-06-17 18:17:26

Différence Entre .o,.un. ,lo and .alors?

Résumé

  • .o est typiquement un fichier d'objet non PIC émis par le compilateur (avant l'étape de linker) lorsqu'il est lié à un exe, le code sera inclus dans l'exécutable -- nous nous lions au moment du lien.
  • .un est typiquement une bibliothèque d'archives contenant un ou plusieurs .o fichiers [non-PIC]. Lorsqu'il est lié à un exe, le particulier "*.les fichiers o" de l'archive seront insérés dans l'exécutable.
  • .lo est généralement un" objet de bibliothèque "qui contient un code PIC compilé manuellement avec gcc-fPIC ou en utilisant libtool .
  • .donc les fichiers sont des fichiers" d'objets partagés". Ils contiennent des objets PIC.

Note:

  • si vous avez besoin d'exécutables statiques, utilisez".o" et ".fichier.
  • si vous avez besoin/voulez des exécutables dynamiques the bind avec des bibliothèques à l'exécution, utilisez .lo et .donc dossiers.

Introduction

bien que j'aime les réponses ci-dessus, ils ne couvrent pas le .a / archiver le formulaire de la bibliothèque. Donc, ici, Je vous adresse tous les trois, avec un bonus d'ajouter dans un .donc, bibliothèque de format. En outre, dans la veine de stackexchange, j'utiliserai plus de texte au cas où les liens se brisent (notez que je n'avais pas besoin de liens de référence pour celui-ci).

Filetype .o

lors de la compilation d'un .o est un fichier objet contenant le code objet émis par le compilateur pour la plate-forme cible. Pour créer un .o fichier:

gcc -c filename.c     <==== creates filename.o

notez que cet exemple n'a pas créé de code indépendant de la Position (PIC). Nous considérons qu'il s'agit d'un objet pour inclusion possible dans une bibliothèque statique ou exécutable. C'est-à-dire lorsque nous associons un exécutable à un .o fichier, le code dans le .le fichier o est inséré dans l'exécutable --- il est lié au moment de la compilation, pas au moment de l'exécution. Cela signifie que l'exécutable peut être redistribué sans inclure le .o fichier. Mise en garde: il est de convention que le .o est considéré comme non-PIC. Nous nommons typiquement les fichiers D'objets PIC avec un .lo extension.

Filetype .a

Le .un type de fichier est une " archive " bibliothèque. Il contient un ou plusieurs .o fichiers et il est généralement utilisé pour la création de statique des fichiers exécutables.

nous utilisons la commande ar pour manipuler des archives bibliothèque. Ci-dessous dans un exemple qui (1) crée une bibliothèque d'archives à partir de .o "1519110920 de fichiers" puis (2) énumère le contenu de celui-ci.

créer la bibliothèque

$ ls *.o
a.o  b.o  c.o                 <=== the files going in the archive

$ ar q libmyStuff.a *.o       <=== put *.o files in an archive (or new one)
ar: creating libmyStuff.a    

$ ls *.a                      <=== just show the library created
libmyStuff.a

afficher le contenu d'une bibliothèque D'Archives

$ ar t libmyStuff.a
a.o
b.o
c.o

Filetype .lo

L'utilisation de .lo est une convention qui est souvent utilisé pour les fichiers objets indépendants de la position. Dans le répertoire courant, la commande libtool compiler crée à la fois une commande .lo et le fichier .o fichier , un avec code PIC et un sans code PIC. Voir la sortie ci-dessous:

$ libtool compile gcc -c a.c
libtool: compile:  gcc -c a.c  -fPIC -DPIC -o .libs/a.o  <== PIC code
libtool: compile:  gcc -c a.c -o a.o >/dev/null 2>&1     <== Not-PIC code

$ ls a.lo a.o
a.lo  a.o       <=== a.lo contains the PIC code.

à noter Également que la .le sous-répertoire de libs a été créé avec A. o dedans. Ce fichier est un code PIC, malgré le nom. Libtool a déplacé ce fichier dans le répertoire courant et a changé l'extension en .lo .

, Vous pouvez toujours créer manuellement .lo simplement en utilisant les options PIC à gcc lorsque vous compilez. Déplacer le résultat .o fichiers .lo extension.

Filetype .so

par convention .cela implique donc un "objets partagés" fichier de bibliothèque. Nous mettons des fichiers D'objets PIC dans des bibliothèques partagées. Dans le contrat à .o et .un fichier , lorsque nous faisons le lien avec .ainsi fichiers le code n'est pas inclus dans le fichier compilé résultant. Que nous utilisons moment de l'exécution de liaison (comme dans la .1519110920). Il y a plus d'une forme de reliure runtime, mais nous n'y reviendrons pas ici.

59
répondu uDude 2016-04-12 10:45:56

le fichier .lo est un objet de bibliothèque, qui peut être intégré dans une bibliothèque partagée, et le fichier .o est un fichier d'objet standard. Plus de renseignements: comment installer et utiliser la bibliothèque partagée de libtool (.lo fichiers)?

4
répondu Nav 2017-05-23 12:18:18