GNU/Linux >> Znalost Linux >  >> Linux

Chyba při sestavování pomocí cmake:nelze najít -lpthreads

Ú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


Linux
  1. Jak opravit chybu konfigurace:nelze najít adresář maker ‚m4‘ [Vyřešeno]

  2. Nelze najít platnou základní adresu URL:Chyba YumRepo [Vyřešeno]

  3. Nelze najít pspell – Opravit chybu konfigurace PHP

  1. Chyba při použití GRANT s IDENTIFIKOVANÝM heslem v MySQL

  2. Nemohu najít existující knihovnu

  3. Chyba kompilace OCaml:/usr/bin/ld:nelze najít -lstr

  1. Chyba Nelze sestavit modul při vytváření externích modulů Perl

  2. Nelze zkompilovat Python.h – Chyba instalace Websockify

  3. Nelze najít chybu pkg-config