2013-02-06 1 views
1

J'ai un projet basé sur C++ (beaucoup de fichiers sources) compilé en utilisant gnu make via un makefile. J'ai une application qui relie une bibliothèque, disons mylib. Maintenant, mylib appartient à un autre développeur. Je vois 2 fichiers présents dans le chemin où les fichiers binaires de bibliothèque sont générés à savoir libmylib.so (objet partagé) et libmylib.a (fichier archive bibliothèque statique)Avec quelle bibliothèque serait-il lier - objet statique ou partagé

Mon application makefile ci-dessous a l'option de liaison pour relier la bibliothèque mylib

LDFLAGS + = - l: mylib ...

question est la version de la bibliothèque mylib serait liée dans mon application exécutable

est-ce que l'objet partagé libmylib.so ou version statique libmylib.a?

Comment serait-il décidé, y aurait-il une autre option de makefile pour gouverner cela?

+1

Je pense que cela dépend de la plate-forme/compilateur, mais IIRC 'gcc' par défaut à dynamique sauf si -static' est spécifié. –

Répondre

4

Par défaut sur Linux non embarqué, vous obtiendrez un lien dynamique. Si vous voulez changer cela, vous pouvez le spécifier dans LDFLAGS; (Des guillemets sont éventuellement requis) Ceci passera à l'état statique pour cette bibliothèque uniquement, puis à la dynamique par défaut.

+0

Merci. Je vais attendre un jour pour voir si une autre réponse apparaît avant d'accepter. – goldenmean

+0

Juste un homme de recherche ld le mentionne comme -Bstatic (--Bdynamic) au lieu de --Bstatic (- Bdynamic). Qu'est-ce que c'est réellement? – goldenmean

+0

@goldenmean Les deux semblent fonctionner pour cette option sous Linux, mais vous avez raison, la documentation semble privilégier '-Bstatic'. –

Questions connexes