2010-10-14 12 views
6

Estoy trabajando en un proyecto de C++ en el que me gustaría usar las bibliotecas de serialización de boost. Descargué e instalé las últimas bibliotecas de impulso de la página de inicio de boost.Ayuda para compilar y usar las bibliotecas boost C++

Cuando traté de compilar y ejecutar el uno de los ejemplos de demostración de serialización de impulso, tengo todo tipo de errores que se parecía a esto:

/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&)': 

Soy nuevo en C++ y potenciar así que cualquier ayuda sería apreciada .

Gracias

+0

@ user475505 error de vinculador. compruebe si ha agregado las libs para vincular. – yadab

Respuesta

5

Gracias a todos por toda su ayuda. Finalmente resolví mi problema, aunque mi solución es bastante anticlimática, y probablemente no tan informativa.

He intentado instalar las bibliotecas de impulso manualmente, descargándolas del sitio web de boost directamente, y descubrí que todas las bibliotecas se habían instalado en/usr/local/lib, y/usr/local/include/boost /. Después de encontrar repetidamente mis errores originales, decidí ver si el Administrador de paquetes Synaptic podía hacer un "mejor" trabajo al instalar las bibliotecas de impulso. Seleccioné 'libboost1.40-all-dev' para instalar todo, pero todavía nada funcionaba.

Finalmente, decidí comenzar de nuevo, así que borré manualmente el directorio boost/en/usr/local/include, y eliminé todos los archivos libboost en/usr/local/lib. Luego marqué todas las bibliotecas de impulso para la eliminación completa para eliminar todo. Una vez que se desinstalaron todas las bibliotecas de impulso, volví al administrador de paquetes Synaptic, seleccioné 'libboost1.40-all-dev' una vez más.

No estoy seguro de qué cambió exactamente cuando volví a instalar las bibliotecas, pero todo comenzó a funcionar nuevamente. La primera vez que probé desde la línea de comandos, y trató de compilar el demo.cpp desde el sitio web una vez más del impulso con el siguiente comando:

g++ demo.cpp -lboost_serialization 

y compilado inmediatamente. Ejecutar el ejecutable muestra exactamente los resultados que estaba buscando. Además, volví a mover el archivo a mi proyecto Eclipse, agregué 'boost_serialization' a las bibliotecas Linker e intenté construir el proyecto. Todo funcionó perfectamente de nuevo, ya que pude construir el proyecto y ejecutar el código de ejemplo.

Realmente no tengo una explicación de por qué esto solucionó mi problema, pero para cualquier persona que experimente problemas similares, el mejor consejo que puedo dar es NO instalar directamente las bibliotecas de impulso, sino tener el administrador del Administrador de paquetes Synaptic todo.

Gracias de nuevo a todos, han sido de gran ayuda.

1

es necesario enlazar a la biblioteca Boost.Serialization. Vea el Boost's getting started page.

12

Es de suponer que necesita un enlace a la biblioteca de serialización. Eche un vistazo en /usr/lib para algo con un nombre similar a libboost_serialization. Entonces dirá g++ (que no has dicho compilador que está utilizando) que desea utilizar (enlace a) esta biblioteca:

g++ main.cpp -lboost_serialization

es decir, si el nombre de la biblioteca es /usr/lib/libboost_serialization.a, omite el lib inicial y la extensión.

¡Buena suerte!

+0

Gracias por las respuestas rápidas, todavía estoy teniendo algunos problemas, pero creo que al menos voy por el buen camino. Olvidé mencionar en la publicación original que estoy usando Eclipse CDT para el desarrollo. Creo que los dos sabían que era un problema de vinculador, así que después de buscar un poco más, encontré un artículo sobre cómo configurar boost en eclipse donde tuve que agregar boost_serialization en el campo de biblioteca de configuración del enlazador. Después de hacer esto, sigo teniendo los mismos errores. ¿Algún consejo más sobre cómo puedo configurar el impulso con Eclipse? Gracias – Swaraj

+0

Trate de ver qué parámetros de línea de comandos Eclipips está pasando a g ++. Luego, asegúrese de que la parte de enlace sea correcta (puede intentar ejecutar el comando fuera de Ecplipse). Publique aquí si no avanza. –

+0

Todavía tengo problemas, aquí está el comando de vinculación que está usando Eclipse: "g ++ -o" Testbench "./demo.o -lboost_serialization" Recibo el mismo error desde la línea de comandos fuera de Eclipse. Gracias por su ayuda hasta ahora – Swaraj

Cuestiones relacionadas