GNU/Linux >> Tutoriales Linux >  >> Linux

Error de compilación usando cmake:no se puede encontrar -lpthreads

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


Linux
  1. No se puede compilar Python.h – Error de instalación de Websockify

  2. Error de configuración de phpize:no se pueden encontrar las fuentes (config.m4)

  3. Error al usar GRANT con IDENTIFICADO por contraseña en MySQL

  4. ¿Cómo cambiar el nombre de varios archivos usando Buscar?

  5. Error de compilación de OCaml:/usr/bin/ld:no se puede encontrar -lstr

Encuentre detalles del sistema Linux usando Python

Construyendo un contenedor de Linux a mano usando espacios de nombres

Encuentra texto en archivos en Linux usando grep

ld no puede encontrar una biblioteca existente

No se puede encontrar el error de la biblioteca libcrypto

No se puede encontrar el error de pkg-config