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