Editar1:
Todas las referencias a continuación son para Ubuntu.
Paquete llamado libpthread-stubs0
es probable que solo sea un resguardo, por lo que no tendrá el pthread_create
función.
¿Tienes esto?
$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.15.so
/lib/x86_64-linux-gnu/libpthread.so.0
Busque el símbolo pthread_create
que debería existir.
$ 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
Si eso no funciona, es posible que necesite la versión de desarrollo de pthread
que está en libc6-dev
. Puede buscar el contenido del paquete que tiene libpthread.so
en http://packages.ubuntu.com/.
Nota:Además, está fallando en -lpthreads
. ¿Debería ser -lpthread
? en su lugar (sin el s
)?
Editar 2
Crea un CMakeLists.txt
simple con lo siguiente y ejecuta cmake
.
cmake_minimum_required (VERSION 2.8.7)
find_package(Threads)
¿Cuál es la salida? ¿Encuentra pthread
? ?
Mi salida es:
-- 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
El problema estaba ocurriendo al ejecutar cmake. Sin embargo, en este caso, cmake no era el problema, el error era silencioso y el error/advertencia relacionado con -lpthreads era lo único que se escribía en el archivo de registro de errores de cmake, aunque eso no causaba ningún problema. He hecho una versión mínima de cmakelists.txt y comencé a probarlo línea por línea hasta que encontré qué paquete estaba causando que se detuviera:finalmente descubrí que era una versión que no coincidía...
Sugerencia:busque el mensaje de error real
Por lo general, buscaría el último mensaje de error. Sin embargo, esta estrategia (a menudo útil) en tales casos conduce al error.
Lo que estás viendo es el CMakeCache.txt
, el CMakeOutput.log
o el CMakeError.log
. ¿Cómo es? Cuando algunas de las macros o pruebas en la fase de configuración fallan, CMake "útilmente" vuelca estos archivos en la salida. Desafortunadamente, estos archivos pueden tener miles de líneas y, por lo general, contienen muchos "*** Error: xyz"
entradas, para varias comprobaciones de configuración. El de "-lpthreads
" casualmente pasó a ser el último en el registro...
Solución :revisa el registro desde la superior , identifique la sección con las comprobaciones de configuración, busque la última comprobación de configuración antes del punto, donde CMake identifica la falla y vuelca sus registros. También puede intentar buscar el texto "Configuring incomplete, errors occurred!
"
Por lo general, encontrará un mensaje de error real muy preciso allí, o al menos encontrará el nombre / ruta de la macro o función llamada en último lugar, y esto le permite identificar qué salió realmente mal.
en un Ubuntu 18.04.1 LTS esta instalación me dio todos los archivos necesarios:
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
no más errores "/usr/bin/ld:no se puede encontrar -lpthreads" después de