#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
std::cout <<
"Hello world, I'm a thread!"
<< std::endl;
}
int main(int argc, char* argv[])
{
boost::thread thrd(&hello);
thrd.join();
return 0;
}
J'ai couru essayé de compiler ce programme et j'ai obtenu ces erreurs:
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to
`boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to
`boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to
`typeinfo for boost::thread_resource_error'
./src/thread.o: In function `condition_variable':
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33:
undefined reference to `boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33:
undefined reference to `boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: \
undefined reference to `typeinfo for boost::thread_resource_error'
./src/thread.o: In function `thread_data_base':
/usr/include/boost/thread/pthread/thread_data.hpp:54:
undefined reference to `vtable for boost::detail::thread_data_base'
./src/thread.o: In function `thread<void (*)()>':
/usr/include/boost/thread/detail/thread.hpp:188:
undefined reference to `boost::thread::start_thread()'
./src/thread.o: In function `~thread_data':
/usr/include/boost/thread/detail/thread.hpp:40:
undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/include/boost/thread/detail/thread.hpp:40: undefined reference to
`boost::detail::thread_data_base::~thread_data_base()'
Quelqu'un peut-il me dire pourquoi j'obtiens cette erreur?
compiler avec la balise mt c'est-à-dire -lboost_thread-mt
J'avais la même question, mais -lboost_thread-mt est maintenant obsolète voir cette réponse sur askubuntu.com. Au lieu de cela, ce que vous voulez maintenant dans votre makefile (au moins pour linux) est:
-lpthread -lboost_thread ...
Boost vous a simplement donné la responsabilité de vous connecter à la bibliothèque de threads de votre système.
De nombreuses bibliothèques boost sont entièrement implémentées dans des fichiers d'en-tête. Boost.thread ne l'est pas. Il semble qu'il ne soit pas lié dans la bibliothèque de threads boost. Vérifiez vos chemins de recherche de l'éditeur de liens. Ou, comme le dit le commentaire du Stargazer712 sur l'OP, vérifiez l'installation. Vous devriez voir quelque chose comme libboost_thread-gcc-xxx-1_nn.o dans votre répertoire lib. Si tel est le cas, essayez de le référencer explicitement dans votre étape de lien (quelque chose comme -L<path_to_lib> -lboost-thread-gcc-xx-1_nn
). Sinon, vous n'avez apparemment pas d'installation complète.
J'ai eu un problème similaire avec centos 6.5 lors de la compilation de povray 3.7 et cela l'a résolu - ajoutez simplement -lboost_thread-mt
dans votre Makefile
.
J'ai eu la même erreur. Je l'ai corrigé en compilant avec -lboost_thread
ajouter une option de compilation
-L<path_to_lib> -lboost-thread-gcc-xx-1_nn
la réponse de Gregg est juste!