Lier une bibliothèque partagée à l'encontre d'une bibliothèque statique: doit la bibliothèque statique être compilées différemment que si une demande est de le lier?

Au moins sur Linux et Solaris, les bibliothèques statiques sont vraiment juste un tas de compilation .o jeté dans un seul gros fichier. Lors de la compilation d'une bibliothèque statique, généralement de l'-fpic drapeau est omis, de sorte que le code généré est dépendant de la position.

Maintenant dire que ma bibliothèque statique est B. j'ai construit et résultat .un fichier qui est vraiment juste une boule de l'ensemble de l'dépendant de la position .o fichiers. Maintenant, j'ai une bibliothèque partagée, j'aimerais construire, Une, et je veux un lien statique B. Lorsque je créer Un, naturellement, je vais utiliser l'option-fpic drapeau pour rendre le code indépendant de la position. Mais si je l'encontre de B, ne suis-je pas le mélange dépendant de la position et de la position de l'objet indépendant de fichiers?

J'ai beaucoup de texte à la réinstallation des erreurs, à moins que j'ai aussi spécifier -mimpure-texte, et je pense que cela peut-être la cause. Il semble que quand je compile une bibliothèque, j'ai vraiment besoin de le compiler 3 fois, une version partagée, une version statique et statique-qui-peut-être-utilisé-par-partagé-libs version. Suis-je le droit? Je pouvais continuer à utiliser -mimpure-texte, mais le g++ page de man dit que si vous n'avez que l'objet n'est pas réellement finir par être partagé (on ne sait pas si c'est tous les non partagé ou tout simplement de la statiquement parties, bien que, personne ne sait?).

  • La question est correctement exposée, il "omet' -fpic dans le premier paragraphe, conduisant à l'dépendant de la position de code, puis l'utilise dans le deuxième paragraphe, conduisant à indépendant de la position du code.