Essayer de lier Boost de manière statique
Je travaille sous Linux, Eclipse CDT, g++ avec la bibliothèque Boost. Avoir programme existant qui utilise Boost thread, j'essaie de lier statiquement au lieu de manière dynamique. /usr/local/lib contient les fichiers suivants:
libbost_thread.a
libbost_thread.so
libbost_thread.1.41.0
Dynamique de liaison:
g++ -o"MyProgram" ./main.o -lboost_thread
Liaison statique:
g++ -static -o"MyProgram" ./main.o -lboost_thread
produit un grand nombre de messages comme:
undefined reference to `pthread_mutex_init'
Comment puis-je lier statiquement à la bibliothèque Boost?
source d'informationauteur Alex F | 2010-02-27
Vous devez vous connecter pour publier un commentaire.
Pour pthread_mutex_init, vous voulez compiler/lien avec pthread option:
Le problème est que les fonctions comme pthread_mutex_init sont dans une bibliothèque séparée. Bibliothèques dynamiques peuvent inclure les métadonnées pour le fait qu'il a besoin de la bibliothèque séparée (donc libboost_thread.il inclut donc le fait qu'il a besoin de libpthread).
Mais bibliothèques statiques ne disposons pas de cette information. Si vous avez besoin de fournir la référence de toutes les bibliothèques nécessaires lorsque vous lier statiquement.
Comme pour l'utilisation de
-pthread
au lieu de-lpthread
c'est légèrement préférable, car il n'a pas seulement des liens de la bibliothèque nécessaire, mais offre d'autres options qui doivent être utilisés (par exemple un-D_REENTRANT
pour le compilateur).Essayez d'ajouter
-lpthread
à votre invocation.Sur Linux une bibliothèque dynamique peut automatiquement dépendent d'autres bibliothèques dynamiques de sorte que lorsque vous le lien, vous obtenez les autres bibliothèques pour gratuit. Lors de la liaison statique, il n'y a aucun système de ce genre et vous devez spécifier les autres bibliothèques manuellement.