Úprava1:
Všechny níže uvedené odkazy jsou pro Ubuntu.
Balíček s názvem libpthread-stubs0
je pravděpodobně pouze útržek, takže nebude mít pthread_create
funkce.
Máte tohle?
$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.15.so
/lib/x86_64-linux-gnu/libpthread.so.0
Zkontrolujte symbol pthread_create
který by měl existovat.
$ 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
Pokud to nefunguje, možná budete potřebovat vývojovou verzi pthread
který je v libc6-dev
. Můžete vyhledat obsah balíčku, který má libpthread.so
na http://packages.ubuntu.com/.
Poznámka:Také selhává na -lpthreads
. Mělo by to být -lpthread
místo toho (bez s
)?
Úprava 2
Vytvořte jednoduchý CMakeLists.txt
s následujícím a spusťte cmake
.
cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)
Jaký je výstup? Najde pthread
?
Můj výstup je:
-- 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
Problém se vyskytoval při spuštění cmake. Ačkoli v tomto případě nebyl problém cmake, chyba byla tichá a chyba/varování související s -lpthreads byla jediná věc, která byla zapsána do souboru protokolu chyb cmake, i když to nezpůsobovalo žádný problém. Udělal jsem minimální verzi souboru cmakelists.txt a začal jsem jej testovat řádek po řádku, dokud jsem nenašel, který balíček způsoboval jeho zastavení:nakonec jsem zjistil, že se jedná o nesoulad verze...
Tip:vyhledejte skutečnou chybovou zprávu
Obvykle byste hledali poslední chybovou zprávu. Tato (často užitečná) strategie však v takových případech vede na scestí.
To, na co se díváte, je CMakeCache.txt
, CMakeOutput.log
nebo CMakeError.log
. Jak to? Když některá z maker nebo testů ve fázi konfigurace selžou, CMake „pomocně“ vypíše tyto soubory na výstup. Bohužel tyto soubory mohou mít tisíce řádků a obvykle obsahují mnoho "*** Error: xyz"
záznamy, pro různé kontroly konfigurace. Ten pro "-lpthreads
" jen náhodou byl poslední v logu...
Řešení :projděte protokol shora , identifikujte sekci s kontrolami konfigurace, najděte poslední kontrolu konfigurace před bodem, kde CMake identifikuje selhání a vypíše své protokoly. Můžete také zkusit vyhledat text "Configuring incomplete, errors occurred!
"
Obvykle tam buď najdete velmi přesné skutečné chybové hlášení, nebo alespoň najdete název/cestu makra nebo funkce volané jako poslední, což vám umožní určit, co se skutečně pokazilo.
na Ubuntu 18.04.1 LTS mi tato instalace poskytla všechny potřebné soubory:
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
žádné další chyby "/usr/bin/ld:nelze najít -lpthreads" po