GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehler beim Erstellen von cmake:kann -lpthreads nicht finden

Edit1:

Alle Referenzen unten beziehen sich auf Ubuntu.

Paket namens libpthread-stubs0 ist wahrscheinlich nur ein Stub, hat also nicht die pthread_create Funktion.

Hast du das?

$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.15.so
/lib/x86_64-linux-gnu/libpthread.so.0

Suchen Sie nach dem Symbol pthread_create die vorhanden sein sollten.

$ 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

Wenn das nicht funktioniert, benötigen Sie möglicherweise die Dev-Version von pthread das ist in libc6-dev . Sie können nach dem Paketinhalt mit libpthread.so suchen in http://packages.ubuntu.com/.

Hinweis:Außerdem schlägt es bei -lpthreads fehl . Sollte es -lpthread sein stattdessen (ohne die s )?

Bearbeiten 2

Erstellen Sie eine einfache CMakeLists.txt mit dem Folgenden und führen Sie cmake aus .

cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)

Was ist die Ausgabe? Findet es pthread ?

Meine Ausgabe ist:

-- 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 

Das Problem trat beim Ausführen von cmake auf. In diesem Fall war cmake jedoch nicht das Problem, der Fehler war still und der mit -lpthreads verbundene Fehler/die Warnung war das einzige, was in die cmake-Fehlerprotokolldatei geschrieben wurde, obwohl dies kein Problem verursachte. Ich habe eine minimale Version erstellt der cmakelists.txt und fing an, sie Zeile für Zeile zu testen, bis ich herausfand, welches Paket dazu führte, dass sie stoppte:schließlich fand ich heraus, dass es ein Versionskonflikt war ...

Tipp:Suchen Sie nach der eigentlichen Fehlermeldung

Normalerweise suchen Sie nach der letzten Fehlermeldung. Allerdings führt diese (oft nützliche) Strategie in solchen Fällen in die Irre.

Was Sie gerade sehen, ist CMakeCache.txt , die CMakeOutput.log oder die CMakeError.log . Wie kommt das? Wenn einige der Makros oder Tests in der Konfigurationsphase fehlschlagen, speichert CMake diese Dateien „hilfreich“ in der Ausgabe. Leider können diese Dateien Tausende von Zeilen lang sein und enthalten normalerweise viele "*** Error: xyz" Einträge für verschiedene Konfigurationsprüfungen. Die für "-lpthreads " war zufälligerweise der letzte im Log...

Lösung :Gehen Sie das Protokoll von oben durch , identifizieren Sie den Abschnitt mit den Konfigurationsprüfungen, suchen Sie die letzte Konfigurationsprüfung vor dem Punkt, an dem CMake einen Fehler identifiziert und seine Protokolle ausgibt. Sie können auch versuchen, nach dem Text "Configuring incomplete, errors occurred!" zu suchen "

Normalerweise finden Sie dort entweder eine sehr genaue tatsächliche Fehlermeldung oder zumindest den Namen / Pfad des zuletzt aufgerufenen Makros oder der zuletzt aufgerufenen Funktion, und dies ermöglicht es Ihnen, genau zu bestimmen, was tatsächlich schief gelaufen ist.


bei einem Ubuntu 18.04.1 LTS hat mir diese Installation alle benötigten Dateien gegeben:

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

keine weiteren Fehler "/usr/bin/ld:cannot find -lpthreads" nach


Linux
  1. Wie benenne ich mehrere Dateien mit Find um?

  2. Kann -lm nicht finden?

  3. ld kann keine vorhandene Bibliothek finden

  4. libcrypto-Bibliotheksfehler kann nicht gefunden werden

  5. OCaml-Kompilierungsfehler:/usr/bin/ld:kann -lstr nicht finden

Finden Sie Linux-Systemdetails mit Python

Manuelles Erstellen eines Linux-Containers mithilfe von Namespaces

Kann keine gültige Basis-URL finden:YumRepo-Fehler [Gelöst]

Pspell kann nicht gefunden werden – PHP-Konfigurationsfehler behoben

Finden Sie Text in Dateien unter Linux mit grep

FEHLER:ld.so:Objekt LD_PRELOAD kann nicht vorab geladen werden:ignoriert