2011-09-03 3 views
0

possible en double:
How to pack multiple library archives (.a) into one archive file?UNIX: Bibliothèque statique liée à une bibliothèque statique

J'ai une situation où je dois fournir une seule bibliothèque statique (.a fichier) à un fichier exécutable pour le construire.

Cependant, je divise cette lib en 2 parties car une partie est commune aux autres fichiers exécutables et l'autre n'est nécessaire que d'un seul.

Alors maintenant, j'ai lib1 (pour exe1) et lib2 (pour tous les exes)

Le problème est que je ne peux pas fournir deux libs, donc je dois fusionner pour exe1, lib2 dans lib1

J'ai essayé de compiler la lib1.o avec -llib2 mais même si cela fonctionne, il semble que rien ne se soit produit

Y a-t-il un autre moyen? Je ne peux penser qu'à utiliser des fichiers d'objets bruts mais je n'aime pas cette idée

Répondre

3

Il n'y a pas besoin de deux bibliothèques statiques; Lorsqu'une bibliothèque statique est utilisée, seules les fonctions (ou variables) nécessaires sont copiées dans l'exécutable - contrairement à une bibliothèque partagée où tout ce qui est dans la bibliothèque est accessible à l'exécutable.

Mécaniquement, l'autre question référencé décrit ce que vous devez faire:

  • Extrait tous les fichiers objet d'une bibliothèque
  • Ajoutez-les à l'autre bibliothèque

Ou:

files=$(ar t lib1.a) 
ar x lib1.a 
ar r lib2.a $files 
rm -f $files lib1.a 
+0

Cela a fonctionné comme un charme ^^ –

0

Vous pouvez même compiler chaque fichier source, produire al l .o et créer deux bibliothèques différentes en utilisant ar. La bibliothèque entière sera produite en utilisant tous les fichiers .o (ceux que vous mettez dans lib1.a et lib2.a ensemble), le plus petit utilisera juste un ensemble réduit de fichiers .o. Than ... un seul Makefile, des fichiers .o produits une fois, deux librairies sortant de ce job: l'une complète (libaplus2.a) et l'autre réduite (lib1.a).

Questions connexes