Est-il possible de relier certains - mais pas toutes - les bibliothèques statiquement avec libtool?

StackOverflow https://stackoverflow.com/questions/1943834

  •  20-09-2019
  •  | 
  •  

Question

Je travaille sur un projet qui est construit en utilisant autoconf, automake et libtool. Le projet est distribué à la fois sous forme binaire et la source.

Sous Linux, par défaut, le script de créer des liens vers toutes les bibliothèques dynamiquement. Cela est logique puisque les utilisateurs de Linux peuvent compter sur le gestionnaire de paquets de leur distribution pour gérer les dépendances.

Sous Windows, par défaut, le script de créer des liens à toutes les bibliothèques en utilisant l'option statiquement -all-static de libtool. Cela est logique car aucune des dépendances sont fournis avec Windows, et il est utile de pouvoir distribuer un seul binaire contenant toutes les dépendances plutôt que sur la distribution de déblayage tonnes de DLL.

Sur OSX, certaines dépendances sont fournies par le système d'exploitation, et certains ne sont pas. Par conséquent, il serait utile de créer un lien vers les bibliothèques OS fourni dynamiquement et aux autres bibliothèques statiquement. Malheureusement libtool est tout ou rien -all-static option est utile ici.

Y at-il un bon moyen d'obtenir un lien vers libtool pour certains bibliothèques statiquement, mais pas tous?

Remarque : Je me rends compte que je pourrais soigneusement compiler les dépendances de sorte que seuls builds statiques sont disponibles. Cependant, je préfère le système de construction pour mon projet étaient robustes dans le cas commun de l'électricité statique et dynamique builds de dépendances étant disponibles.

Remarque . Bien sûr, je ne suis pas concerné par vraiment les dépendances de bas niveau comme les bibliothèques d'exécution C / C ++, qui sont toujours liés dynamiquement sur les trois plates-formes ci-dessus

Était-ce utile?

La solution

Après quelques recherches, j'ai répondu à ma propre question.

Si vous avez statique et dynamique builds d'une bibliothèque installée, et vous lien vers cette bibliothèque en utilisant le paramètre -l, liens libtool de préférence à la construction dynamique. Il relie à une accumulation d'électricité statique s'il n'y a pas d'accumulation dynamique disponible, ou si vous passez les options de -static ou -all-static.

libtool peut être forcé à relier à la bibliothèque statique en donnant le chemin complet de cette bibliothèque à la place de l'option -l.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top