UNIX: Bibliothèque statique liée à une bibliothèque statique

Duplication possible:
Comment emballer plusieurs archives de bibliothèque (.a) dans un fichier d’archive?

J’ai une situation où je ne dois fournir qu’une seule bibliothèque statique (fichier .a) à un fichier exécutable pour le créer.

Cependant, je divise cette lib en 2 parties car une partie est commune aux autres fichiers exécutables et l’autre n’est requirejse que par une seule.

J’ai maintenant lib1 (pour exe1) et lib2 (pour tous les exes)

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

J’ai essayé de comstackr le fichier lib1.o avec -llib2 mais même si cela fonctionne, rien ne se passe

Y a-t-il un autre moyen? Je ne peux que penser à utiliser des fichiers objects bruts mais je n’aime pas cette idée

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 se trouve dans la bibliothèque est accessible à l’exécutable.

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

  • Extraire tous les fichiers objects 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 

Vous pouvez même comstackr chaque fichier source, produire tous les fichiers .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 avez mis ensemble dans lib1.a et lib2.a), le plus petit utilisera seulement un ensemble réduit de fichiers .o. Que … un seul Makefile, .o fichiers produits une fois, deux librairies issues de ce job: la complète (libaplus2.a) et la réduite (lib1.a).