GNU/Linux >> Tutoriels Linux >  >> Linux

Erreur de construction avec cmake :impossible de trouver -lpthreads

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


Linux
  1. Impossible de trouver une baseurl valide :erreur YumRepo [Résolu]

  2. Erreur Impossible de construire le module lors de la construction de modules Perl externes

  3. Erreur de configuration de phpize :impossible de trouver les sources (config.m4)

  4. Erreur Impossible de trouver l'[extension PHP mysqlnd] d'OpenSSL

  5. Impossible de trouver pspell - Correction d'une erreur de configuration PHP

Trouver les détails du système Linux à l'aide de Python

Construire un conteneur Linux à la main à l'aide d'espaces de noms

Rechercher du texte dans des fichiers sous Linux à l'aide de grep

Impossible de trouver l'erreur de bibliothèque libcrypto

ERREUR :ld.so :l'objet LD_PRELOAD ne peut pas être préchargé :ignoré

Erreur lors de l'utilisation d'une version plus récente de la glibc