Pergunta

Eu estou tentando construir um projeto usando Asio do impulso e estou tendo alguns problemas. Inicialmente, eu tentei construir o projeto sem quaisquer bibliotecas adicionais já que tudo é supostamente nos arquivos de cabeçalho.

O programa que eu estou tentando olhares construção como esta:

#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;
}

Ela pode ser encontrada aqui no site do Boost.

Assim, inicialmente eu só tinha:

-I /usr/include/boost_1_40_0

Isto resultou nos seguintes erros:

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.

Parecia que eu precisava da biblioteca do sistema. Então, eu segui as instruções do guia de Introdução encontrada aqui , que me deu um monte de bibliotecas localizadas em / usr / include / boost_1_40_0 / estágio / lib . Entre eles estava o libboost_system.a . Assim, eu tentei compilar com:

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

No entanto, eu tenho esse:

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.

Eu não sei por que, mas parece que não consegue identificar a biblioteca ou qualquer um dos outros que eu tento. O que eu poderia estar fazendo de forma incorreta? Agradecemos antecipadamente!

Foi útil?

Solução

Alterar -llibboost_system para -lboost_system.

No Linux, o prefixo "lib" na frente de uma biblioteca não é usado quando referenciamento disse biblioteca.

Outras dicas

Em resposta neste caso james estava correta, mas se mais alguém acontece a tropeçar em cima deste post como eu fiz, em seguida, estar ciente de que você pode obter esta mensagem se você ligar velhos impulso cabeçalhos com bibliotecas novas. get_system_category() especificamente foi descontinuado. Corri para este problema, enquanto acidentalmente incluindo cabeçalhos fornecidos pelo distro mas vinculando contra a minha própria cópia interna de impulso.

Se você ainda tiver problemas que você pode querer incluir POSIX threads adicionando aos sinalizadores de vinculador:

-lpthread
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top