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