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