library bibliotecas linux boost boost-asio linker-errors deadline-timer

bibliotecas - Vinculación de Boost Library en Linux



boost download (3)

Cambia -llibboost_system a -lboost_system .

En Linux, el prefijo "lib" en frente de una biblioteca no se utiliza al hacer referencia a dicha biblioteca.

Estoy tratando de construir un proyecto usando Asio de Boost y estoy teniendo algunos problemas. Inicialmente, traté de construir el proyecto sin ninguna biblioteca adicional, ya que todo está supuestamente en los archivos de encabezado.

El programa que intento crear se ve así:

#include <iostream> #include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time.hpp> int main() { boost::asio::io_service io; boost::asio::deadline_timer t(io, boost::posix_time::seconds(5)); t.wait(); std::cout << "Hello, world!" << std::endl; return 0; }

Se puede encontrar here en el sitio web de Boost.

Entonces, inicialmente solo tenía:

-I /usr/include/boost_1_40_0

Esto dio lugar a los siguientes errores:

make -k all Building target: HelloWorld Invoking: GCC C++ Linker g++ -o"HelloWorld" ./main.o ./main.o: In function `__static_initialization_and_destruction_0'': /usr/include/boost_1_40_0/boost/system/error_code.hpp:205: undefined reference to `boost::system::get_system_category()'' /usr/include/boost_1_40_0/boost/system/error_code.hpp:206: undefined reference to `boost::system::get_generic_category()'' /usr/include/boost_1_40_0/boost/system/error_code.hpp:211: undefined reference to `boost::system::get_generic_category()'' /usr/include/boost_1_40_0/boost/system/error_code.hpp:212: undefined reference to `boost::system::get_generic_category()'' /usr/include/boost_1_40_0/boost/system/error_code.hpp:213: undefined reference to `boost::system::get_system_category()'' ./main.o: In function `boost::asio::error::get_system_category()'': /usr/include/boost_1_40_0/boost/asio/error.hpp:218: undefined reference to `boost::system::get_system_category()'' ./main.o: In function `error_code'': /usr/include/boost_1_40_0/boost/system/error_code.hpp:312: undefined reference to `boost::system::get_system_category()'' ./main.o: In function `posix_tss_ptr'': /usr/include/boost_1_40_0/boost/asio/detail/posix_tss_ptr.hpp:47: undefined reference to `pthread_key_create'' ./main.o: In function `~posix_tss_ptr'': /usr/include/boost_1_40_0/boost/asio/detail/posix_tss_ptr.hpp:61: undefined reference to `pthread_key_delete'' ./main.o: In function `boost::asio::detail::posix_thread::join()'': /usr/include/boost_1_40_0/boost/asio/detail/posix_thread.hpp:77: undefined reference to `pthread_join'' ./main.o: In function `~posix_thread'': /usr/include/boost_1_40_0/boost/asio/detail/posix_thread.hpp:69: undefined reference to `pthread_detach'' collect2: ld returned 1 exit status make: *** [HelloWorld] Error 1 make: Target `all'' not remade because of errors.

Parecía que necesitaba la biblioteca del sistema. Entonces, seguí las instrucciones en la guía de Inicio que se encuentra here , que me dio un grupo de bibliotecas ubicadas en / usr / include / boost_1_40_0 / stage / lib . Entre ellos estaba libboost_system.a . Por lo tanto, intenté compilar con:

-I /usr/include/boost_1_40_0 -L /usr/include/boost_1_40_0/stage/lib -l libboost_system

Sin embargo, tengo esto:

make -k all Building target: HelloWorld Invoking: GCC C++ Linker g++ -L/usr/lib -L/usr/include/boost_1_40_0/stage/lib -o"HelloWorld" ./main.o -llibboost_system /usr/bin/ld: cannot find -llibboost_system collect2: ld returned 1 exit status make: *** [HelloWorld] Error 1 make: Target `all'' not remade because of errors.

No estoy seguro de por qué, pero parece que no puedo identificar la biblioteca o cualquiera de las otras que intento. ¿Qué podría estar haciendo incorrectamente? ¡Gracias por adelantado!


En este caso, la respuesta de James fue correcta, pero si alguien más se tropieza con esta publicación como yo, entonces tenga en cuenta que puede obtener este mensaje si vincula encabezados antiguos de refuerzo con las bibliotecas más nuevas. get_system_category() específicamente ha quedado obsoleto. Me encontré con este problema mientras accidentalmente incluía encabezados distribuidos por distro pero vinculando contra mi propia copia interna de impulso.


Si aún tiene problemas, puede incluir posix-threads al agregar a los indicadores del enlazador:

-lpthread