GNU/Linux >> Linux Esercitazione >  >> Linux

Errore di compilazione utilizzando cmake:impossibile trovare -lpthreads

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 [email protected]@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


Linux
  1. Come risolvere l'errore di configurazione:impossibile trovare la directory macro 'm4' [Risolto]

  2. Impossibile trovare un URL di base valido:errore YumRepo [risolto]

  3. Impossibile compilare Python.h – Errore di installazione di Websockify

  4. Errore di configurazione di phpize:impossibile trovare le fonti (config.m4)

  5. Errore Impossibile trovare [estensione PHP mysqlnd] di OpenSSL

Trova i dettagli del sistema Linux usando Python

Costruire un container Linux a mano usando gli spazi dei nomi

Trova testo nei file su Linux usando grep

Come rinominare più file usando Trova?

ld non riesce a trovare una libreria esistente

Errore di compilazione OCaml:/usr/bin/ld:impossibile trovare -lstr