2010-10-14 21 views
6

Je travaille sur un projet C++ dans lequel j'aimerais utiliser les bibliothèques de sérialisation de boost. J'ai téléchargé et installé les dernières bibliothèques de boost de la page d'accueil de boost.Aide à la compilation et à l'utilisation de bibliothèques C++ boost

Lorsque j'ai essayé de compiler et exécuter l'un des exemples de sérialisation de démonstration de boost, j'ai toutes sortes d'erreurs qui ressemblaient à ceci:

/usr/local/include/boost/archive/detail/iserializer.hpp:173: undefined reference to `boost::archive::archive_exception::~archive_exception()' 
./demo.o: In function `void boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive>::save_standard::invoke<bus_schedule::trip_info>(boost::archive::text_oarchive&, bus_schedule::trip_info const&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:253: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)' 
./demo.o: In function `void boost::archive::save_access::end_preamble<boost::archive::text_oarchive>(boost::archive::text_oarchive&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:83: undefined reference to `boost::archive::detail::basic_oarchive::end_preamble()' 
./demo.o: In function `void boost::archive::detail::load_pointer_type<boost::archive::text_iarchive>::invoke<bus_route*>(boost::archive::text_iarchive&, bus_route*&)': 
/usr/local/include/boost/archive/detail/iserializer.hpp:518: undefined reference to `boost::archive::detail::basic_iarchive::load_pointer(void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&))' 
./demo.o: In function `void boost::archive::detail::save_pointer_type<boost::archive::text_oarchive>::non_polymorphic::save<bus_route>(boost::archive::text_oarchive&, bus_route&)': 

Je suis nouveau à C++ et d'augmenter de sorte que toute aide serait appréciée .

Merci

+0

@ erreur de liaison utilisateur user475505. vérifiez si vous avez ajouté les bibliothèques pour la liaison. – yadab

Répondre

5

Merci à tous pour votre aide. J'ai finalement résolu mon problème, bien que ma solution soit plutôt anti-climacique, et probablement pas aussi informative. J'ai essayé d'installer les bibliothèques de boost manuellement, en les téléchargeant directement sur le site de boost, et j'ai trouvé que toutes les bibliothèques avaient été installées dans/usr/local/lib, et/usr/local/include/boost /. Après avoir couru à plusieurs reprises dans mes erreurs d'origine, j'ai décidé de voir si le Gestionnaire de paquets Synaptic pourrait faire un «meilleur» travail d'installation des bibliothèques de boost. J'ai choisi 'libboost1.40-all-dev' pour tout installer, mais rien ne fonctionnait. Finalement, j'ai décidé de recommencer à zéro pour supprimer manuellement le répertoire boost/dans/usr/local/include, et j'ai supprimé tous les fichiers libboost dans/usr/local/lib. J'ai ensuite marqué toutes les bibliothèques de boost pour une suppression complète pour tout enlever. Une fois que toutes les librairies boost ont été désinstallées, je suis retourné au Synaptic Package Manager, et j'ai choisi 'libboost1.40-all-dev' une fois de plus.

Je ne sais pas exactement ce qui a changé lorsque j'ai réinstallé les bibliothèques, mais tout a recommencé à fonctionner. Je Testée d'abord de la ligne de commande, et a essayé de compiler le demo.cpp sur le site Web de boost un plus de temps avec la commande suivante:

g++ demo.cpp -lboost_serialization 

et compilé immédiatement. L'exécution de l'exécutable affichait exactement les résultats que je recherchais. De plus, j'ai replacé le fichier dans mon projet Eclipse, ajouté 'boost_serialization' aux bibliothèques de Linker et essayé de construire le projet. Tout a parfaitement fonctionné à nouveau, car j'ai pu construire le projet et exécuter le code d'exemple. Je n'ai pas vraiment d'explication sur la raison pour laquelle cela a résolu mon problème, mais pour quelqu'un d'autre rencontrant des problèmes similaires, le meilleur conseil que je peux donner est de NE PAS installer les bibliothèques boost directement, mais plutôt de gérer le gestionnaire de paquets Synaptic tout.

Merci encore à tous, vous avez été extrêmement utile.

1

Vous devez créer un lien vers la bibliothèque Boost.Serialization. Voir le démarrage de la Boost page.

12

Vous devez probablement créer un lien vers la bibliothèque de sérialisation. Jetez un oeil à /usr/lib pour quelque chose avec un nom similaire à libboost_serialization. Ensuite, dites g++ (vous ne dites pas quel compilateur vous utilisez) que vous souhaitez utiliser (lien vers) cette bibliothèque:

g++ main.cpp -lboost_serialization

à savoir Si le nom de la bibliothèque est /usr/lib/libboost_serialization.a, vous devez omettre le lib initial et l'extension.

Bonne chance!

+0

Merci pour les réponses rapides, j'ai toujours des problèmes, mais je pense que je suis au moins sur la bonne voie. J'ai oublié de mentionner dans le post original que j'utilise le CDT Eclipse pour le développement. Je pense que vous aviez tous les deux raison en disant que c'était un problème de linker, donc après avoir cherché un peu plus, j'ai trouvé un article sur la mise en place de boost dans eclipse où j'ai dû ajouter boost_serialization dans le champ library. Après avoir fait cela, j'ai toujours les mêmes erreurs. D'autres conseils sur la façon dont je peux mettre en place un boost avec Eclipse? Merci – Swaraj

+0

Essayez de voir les paramètres de ligne de commande que Ecplips passe à g ++. Assurez-vous ensuite que la partie de liaison est correcte (vous pouvez essayer d'exécuter la commande en dehors d'Ecplipse). Postez-le ici si vous ne parvenez pas. –

+0

J'ai toujours des problèmes, voici la commande de liaison utilisée par Eclipse: "g ++ -o" Testbench "./demo.o -lboost_serialization" Je reçois la même erreur depuis la ligne de commande en dehors d'Eclipse. Merci pour votre aide jusqu'à maintenant – Swaraj