2017-08-05 16 views
0

J'ai un cas où il y a deux bibliothèques lib1 et lib2. lib2 a des dépendances sur lib1. Dans mon cas, lib2 est fondamentalement un wrapper de haut niveau autour des fonctions de lib1. L'application finale va simplement utiliser les fonctions de lib2 en incluant l'en-tête correspondant. Comment construire de manière statique les bibliothèques et les lier au programme final?construire une bibliothèque statique qui dépend d'une autre bibliothèque statique

Répondre

5

Les bibliothèques statiques sont simplement des archives de fichiers d'objets (.o), vous ne pouvez donc pas avoir d'informations de dépendance incorporées. Quelque chose comme ar cr lib1.a foo.o bar.o [more object files] va construire vos bibliothèques.

Parce qu'il n'y a aucune information de dépendance, votre programme principal doit relier les deux les bibliothèques et il est important de lier lib1aprèslib2 quand lib2 dépend de lib1 (sinon l'éditeur de liens ne trouve pas les symboles non résolus au lib2). Une étape de liaison pourrait donc ressembler à ceci (en supposant que vous utilisez gcc et vos bibliothèques sont dans le répertoire courant):

gcc -otest main.o -L. -Wl,-Bstatic -l2 -l1 
+0

+1 Je pensais la même chose, mais en raison de moins d'expérience en C, je ne l'ai pas répondu. (Y) –

+0

@rici le lieur n'est pas dans le champ d'application de la norme. C'est à propos du linker GNU. Vous pouvez lister la même bibliothèque * deux fois * dans une invocation si nécessaire. –

+0

Pour les bibliothèques, il est possible de les placer deux fois sur la ligne de commande: -l1 -l2 -l1 va gérer les références dans les deux sens, y compris la récurrence mutuelle. – rici