Modifica1:
Tutti i riferimenti seguenti sono per Ubuntu.
Pacchetto denominato libpthread-stubs0 è probabilmente solo uno stub, quindi non avrà il pthread_create funzione.
Ce l'hai?
$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.15.so
/lib/x86_64-linux-gnu/libpthread.so.0
Controlla il simbolo pthread_create che dovrebbe esistere.
$ nm /lib/x86_64-linux-gnu/libpthread.so.0 | grep "pthread_create"
0000000000008140 t __pthread_create_2_1
0000000000008140 T example@unixlinux.online@GLIBC_2.2.5
Se non funziona, potresti aver bisogno della versione dev di pthread che è in libc6-dev . Puoi cercare il contenuto del pacchetto che ha libpthread.so in http://packages.ubuntu.com/.
Nota:inoltre, fallisce su -lpthreads . Dovrebbe essere -lpthread invece (senza s )?
Modifica 2
Crea un semplice CMakeLists.txt con quanto segue ed esegui cmake .
cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)
Qual è l'output? Trova pthread ?
Il mio output è:
-- 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
Il problema si verificava durante l'esecuzione di cmake. Tuttavia, in questo caso cmake non era il problema, l'errore era silenzioso e l'errore/avviso relativo a -lpthreads era l'unica cosa scritta nel file di registro degli errori di cmake, sebbene ciò non causasse alcun problema. Ho fatto una versione minima di cmakelists.txt e ho iniziato a testarlo riga per riga finché non ho scoperto quale pacchetto ne causava l'arresto:alla fine ho scoperto che si trattava di una mancata corrispondenza di versione...
Suggerimento:cerca il messaggio di errore effettivo
In genere cerchi l'ultimo messaggio di errore. Tuttavia, questa strategia (spesso utile) in questi casi porta fuori strada.
Quello che stai guardando è il CMakeCache.txt , il CMakeOutput.log o il CMakeError.log . Come mai? Quando alcune delle macro o dei test nella fase di configurazione falliscono, CMake scarica "utilmente" questi file nell'output. Sfortunatamente, questi file possono essere lunghi migliaia di righe e in genere contengono molti "*** Error: xyz" voci, per vari controlli di configurazione. Quello per "-lpthreads " casualmente era l'ultimo nel registro...
Soluzione :esamina il registro dall'alto , identifica la sezione con i controlli di configurazione, trova l'ultimo controllo di configurazione prima del punto in cui CMake identifica l'errore e scarica i suoi registri. Potresti anche provare a cercare il testo "Configuring incomplete, errors occurred! "
In genere troverai un messaggio di errore effettivo molto preciso lì, o almeno trovi il nome/percorso della macro o della funzione chiamata per ultima, e questo ti consente di individuare ciò che effettivamente è andato storto.
su Ubuntu 18.04.1 LTS questa installazione mi ha fornito tutti i file necessari:
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
niente più errori "/usr/bin/ld:impossibile trovare -lpthreads" dopo