Question

J'essaie de construire un projet en utilisant Asio de Boost et j'ai des problèmes. Au départ, j’ai essayé de construire le projet sans aucune bibliothèque supplémentaire, car tout est supposé se trouver dans les fichiers d’en-tête.

Le programme que j'essaie de créer ressemble à ceci:

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

Vous pouvez le trouver ici sur le site Web de Boost.

Donc, au départ, je viens d'avoir:

-I /usr/include/boost_1_40_0

Cela a entraîné les erreurs suivantes:

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.

Il est apparu que j'avais besoin de la bibliothèque système. J'ai donc suivi les instructions du guide de mise en route trouvé ici , ce qui m'a fourni un grand nombre de bibliothèques situées dans / usr / include / boost_1_40_0 / stage / lib . Parmi eux se trouvait libboost_system.a . J'ai donc essayé de compiler avec:

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

Cependant, j'ai ceci:

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.

Je ne sais pas pourquoi, mais il semble impossible d'identifier la bibliothèque ou l'une des autres que j'essaie. Que pourrais-je faire de manière incorrecte? Merci d'avance!

Était-ce utile?

La solution

Remplacez -llibboost_system par -lboost_system .

Sous Linux, le "lib" le préfixe situé devant une bibliothèque n’est pas utilisé pour référencer ladite bibliothèque.

Autres conseils

Dans ce cas, la réponse de James était correcte, mais si quelqu'un d'autre tombait sur ce message comme je le savais, sachez que vous pouvez obtenir ce message si vous liez d'anciens en-têtes de boost à de nouvelles bibliothèques. get_system_category () a été obsolète. Je me suis heurté à ce problème en incluant accidentellement des en-têtes fournis par la distribution, mais en liant contre ma propre copie interne de boost.

Si vous rencontrez toujours des problèmes, vous pouvez inclure des threads posix en ajoutant des drapeaux à l'éditeur de liens:

-lpthread
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top