Domanda

Sto provando a costruire un progetto usando Asio di Boost e ho dei problemi. Inizialmente, ho provato a costruire il progetto senza librerie aggiuntive poiché tutto è presumibilmente nei file di intestazione.

Il programma che sto cercando di creare è simile al seguente:

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

Può essere trovato qui sul sito Web di Boost.

Quindi inizialmente avevo:

-I /usr/include/boost_1_40_0

Ciò ha comportato i seguenti errori:

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.

Sembrava che avessi bisogno della libreria di sistema. Quindi, ho seguito le indicazioni sulla guida introduttiva trovata qui , che mi ha dato un mucchio di librerie situate in / usr / include / boost_1_40_0 / stage / lib . Tra questi c'era libboost_system.a . Quindi, ho provato a compilare con:

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

Tuttavia, ho ottenuto questo:

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.

Non sono sicuro del perché, ma non riesco a identificare la libreria o nessuna delle altre che provo. Cosa potrei fare in modo errato? Grazie in anticipo!

È stato utile?

Soluzione

Cambia -llibboost_system in -lboost_system .

In linux, la "quot" lib " il prefisso davanti a una libreria non viene usato quando si fa riferimento a detta libreria.

Altri suggerimenti

In questo caso la risposta di James era corretta, ma se qualcun altro capita di imbattersi in questo post come ho fatto io, tieni presente che puoi ricevere questo messaggio se colleghi vecchie intestazioni boost a librerie più recenti. get_system_category () in particolare è stato deprecato. Ho riscontrato questo problema includendo accidentalmente le intestazioni fornite dalla distribuzione ma collegandomi alla mia copia interna di boost.

Se i problemi persistono, potresti voler includere posix-thread aggiungendoli ai flag del linker:

-lpthread
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top