Edit1 :
Toutes les références ci-dessous concernent Ubuntu.
Paquet nommé libpthread-stubs0
n'est probablement qu'un stub, donc n'aura pas le pthread_create
fonction.
Avez-vous ceci ?
$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.15.so
/lib/x86_64-linux-gnu/libpthread.so.0
Vérifiez le symbole pthread_create
qui devrait exister.
$ nm /lib/x86_64-linux-gnu/libpthread.so.0 | grep "pthread_create"
0000000000008140 t __pthread_create_2_1
0000000000008140 T [email protected]@GLIBC_2.2.5
Si cela ne fonctionne pas, vous aurez peut-être besoin de la version dev de pthread
qui est en libc6-dev
. Vous pouvez rechercher le contenu du paquet qui a libpthread.so
dans http://packages.ubuntu.com/.
Remarque :De plus, il échoue sur -lpthreads
. Doit-il être -lpthread
à la place (sans le s
) ?
Modifier 2
Créer un simple CMakeLists.txt
avec ce qui suit et exécutez cmake
.
cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)
Quelle est la sortie ? Trouve-t-il pthread
?
Ma sortie est :
-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found.
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
Le problème se produisait lors de l'exécution de cmake. Bien que, dans ce cas, cmake n'était pas le problème, l'erreur était silencieuse et l'erreur/avertissement lié à -lpthreads était la seule chose écrite dans le fichier journal des erreurs cmake, bien que cela ne posait aucun problème. du fichier cmakelists.txt et j'ai commencé à le tester ligne par ligne jusqu'à ce que je trouve quel paquet le provoquait :finalement, j'ai découvert qu'il s'agissait d'une incompatibilité de version...
Astuce :recherchez le message d'erreur réel
Généralement, vous recherchez le dernier message d'erreur. Cependant, cette stratégie (souvent utile) dans de tels cas induit en erreur.
Ce que vous regardez est le CMakeCache.txt
, le CMakeOutput.log
ou le CMakeError.log
. Comment ça ? Lorsque certaines des macros ou des tests de la phase de configuration échouent, CMake vide "utilement" ces fichiers vers la sortie. Malheureusement, ces fichiers peuvent contenir des milliers de lignes et contiennent généralement beaucoup de "*** Error: xyz"
entrées, pour diverses vérifications de configuration. Celui pour "-lpthreads
" Il s'est avéré que c'était par hasard le dernier dans le journal...
Solution :parcourez le journal depuis le haut , identifiez la section avec les contrôles de configuration, trouvez le dernier contrôle de configuration avant le point, où CMake identifie l'échec et vide ses journaux. Vous pouvez également essayer de rechercher le texte "Configuring incomplete, errors occurred!
"
En règle générale, vous y trouverez soit un message d'erreur réel très précis, soit au moins le nom / le chemin de la macro ou de la fonction appelée en dernier, ce qui vous permet d'identifier ce qui s'est réellement passé.
sur un Ubuntu 18.04.1 LTS, cette installation m'a donné tous les fichiers nécessaires :
apt -y install libboost-tools-dev libboost-thread1.62-dev magics++
/usr/lib/x86_64-linux-gnu/libpthread.a
/usr/lib/x86_64-linux-gnu/libpthread.so
/usr/lib/x86_64-linux-gnu/libpthread_nonshared.a
plus d'erreurs "/usr/bin/ld:can can find -lpthreads" après