GNU/Linux >> Belajar Linux >  >> Linux

Membangun kesalahan menggunakan cmake:tidak dapat menemukan -lpthreads

Edit1:

Semua referensi di bawah adalah untuk Ubuntu.

Paket bernama libpthread-stubs0 kemungkinan hanya sebuah rintisan, jadi tidak akan memiliki pthread_create fungsi.

Apakah Anda memiliki ini?

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

Periksa simbol pthread_create yang seharusnya ada.

$ 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

Jika tidak berhasil, Anda mungkin memerlukan versi dev dari pthread yang ada di libc6-dev . Anda dapat mencari isi paket yang memiliki libpthread.so di http://packages.ubuntu.com/.

Catatan:Selain itu, gagal pada -lpthreads . Seharusnya -lpthread sebagai gantinya (tanpa s )?

Edit 2

Buat CMakeLists.txt sederhana dengan yang berikut dan jalankan cmake .

cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)

Apa hasilnya? Apakah itu menemukan pthread ?

Keluaran saya adalah:

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

Masalahnya terjadi saat menjalankan cmake. Padahal, dalam hal ini cmake bukan masalahnya, kesalahannya diam dan -lpthreads terkait kesalahan/peringatan adalah satu-satunya hal yang ditulis ke file log kesalahan cmake, meskipun itu tidak menyebabkan masalah apa pun. Saya telah melakukan versi minimal dari cmakelists.txt dan mulai mengujinya baris demi baris sampai saya menemukan paket mana yang menyebabkannya berhenti:akhirnya saya menemukan itu adalah ketidakcocokan versi...

Petunjuk:cari pesan kesalahan yang sebenarnya

Biasanya Anda akan mencari pesan kesalahan terakhir. Namun, strategi (sering berguna) ini dalam kasus seperti itu menyesatkan.

Apa yang Anda lihat adalah CMakeCache.txt , CMakeOutput.log atau CMakeError.log . Bagaimana bisa? Ketika beberapa makro atau pengujian dalam fase konfigurasi gagal, CMake "membantu" membuang file-file ini ke output. Sayangnya, file ini bisa ribuan baris, dan biasanya berisi banyak "*** Error: xyz" entri, untuk berbagai pemeriksaan konfigurasi. Satu untuk "-lpthreads " kebetulan menjadi yang terakhir di log...

Solusi :telusuri log dari atas , identifikasi bagian dengan pemeriksaan konfigurasi, temukan pemeriksaan konfigurasi terakhir sebelum ke titik, di mana CMake mengidentifikasi kegagalan dan membuang lognya. Anda juga dapat mencoba mencari teks "Configuring incomplete, errors occurred! "

Biasanya Anda akan menemukan pesan kesalahan aktual yang sangat tepat di sana, atau setidaknya Anda menemukan nama/jalur makro atau fungsi yang disebut terakhir, dan ini memungkinkan Anda untuk menentukan apa yang sebenarnya salah.


di Ubuntu 18.04.1 LTS instalasi ini memberi saya semua file yang dibutuhkan:

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

tidak ada lagi kesalahan "/usr/bin/ld:tidak dapat menemukan -lpthreads" setelah


Linux
  1. Kesalahan menggunakan GRANT dengan IDENTIFIED dengan kata sandi di MySQL

  2. Bagaimana Cara Mengganti Nama Banyak File Menggunakan Find?

  3. Tidak Dapat Menemukan -lm?

  1. Tidak dapat menemukan kesalahan perpustakaan libcrypto

  2. Kesalahan Kompilasi OCaml:/usr/bin/ld:tidak dapat menemukan -lstr

  3. Tidak dapat menemukan kesalahan pkg-config

  1. Cara Memperbaiki kesalahan Konfigurasi:tidak dapat menemukan direktori makro 'm4' [Terpecahkan]

  2. Tidak dapat menemukan baseurl yang valid:Kesalahan YumRepo [Terpecahkan]

  3. Kesalahan Tidak dapat membangun modul saat membangun modul Perl eksternal