Reliant la Bibliothèque Boost dans Linux
Je suis en train de construire un projet à l'aide de Boost Asio et je vais avoir quelques problèmes. D'abord, j'ai essayé de construire le projet sans des bibliothèques supplémentaires, puisque tout ce qui est soi-disant dans les fichiers d'en-tête.
Le programme que je suis en train de construire 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;
}
Il peut être trouvé ici sur un coup de pouce du site.
Donc, au départ, j'ai juste eu:
-I /usr/include/boost_1_40_0
Ce qui a entraîné des 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. Donc, j'ai suivi les instructions du guide de prise en main trouvé ici, ce qui m'a donné un tas de bibliothèques situées dans /usr/include/boost_1_40_0/stage/lib. Parmi eux, libboost_system.un. Donc, j'ai 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 obtenu 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 n'arrive pas à identifier la bibliothèque ou à l'un des autres que j'ai essayer. Que pourrais-je faire de mal? Merci à l'avance!
Vous devez vous connecter pour publier un commentaire.
Changement
-llibboost_system
à-lboost_system
.Dans linux, le préfixe "lib" de la bibliothèque n'est pas utilisé lorsque le référencement dit de la bibliothèque.
Dans ce cas-jacques-de-la réponse était correcte, mais si quelqu'un d'autre arrive de tomber sur ce post, comme je l'ai fait alors sachez que vous pouvez recevoir ce message si vous vieux lien stimuler les en-têtes de à de nouvelles bibliothèques.
get_system_category()
spécifiquement a été désapprouvée. J'ai rencontré ce problème lors de l'accidentellement y compris la distribution fournis par les en-têtes de mais en les reliant à l'encontre de ma propre copie interne de boost.Si vous avez toujours des problèmes, vous voudrez peut-être inclure posix threads par l'ajout de l'éditeur de liens drapeaux:
-pthread Adds support for multithreading with the pthreads library. This option sets flags for both the preprocessor and linker.