Pregunta

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 se supone que está en los archivos de encabezado.

El programa que estoy tratando de construir 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 aquí en el sitio web de Boost.

Entonces, inicialmente tuve:

-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 de la guía de introducción que se encuentra en aquí , que me dio un montón de bibliotecas ubicadas en / usr / include / boost_1_40_0 / stage / lib . Entre ellos se encontraba libboost_system.a . Así, 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 se puede identificar la biblioteca o cualquiera de las otras que intento. ¿Qué podría estar haciendo incorrectamente? Gracias de antemano!

¿Fue útil?

Solución

Cambie -llibboost_system a -lboost_system .

En Linux, el " lib " el prefijo delante de una biblioteca no se usa cuando se hace referencia a dicha biblioteca.

Otros consejos

En este caso, la respuesta de James fue correcta, pero si alguien más se topa con este post como lo hice, entonces tenga en cuenta que puede recibir este mensaje si vincula encabezados de boost antiguos con bibliotecas más nuevas. get_system_category () específicamente ha sido desaprobado. Me encontré con este problema mientras incluía accidentalmente los encabezados provistos por la distribución pero los vinculaba con mi propia copia interna de boost.

Si aún tienes problemas, es posible que desees incluir subprocesos posix agregando a las banderas del vinculador:

-lpthread
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top