es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Compilando un ejemplo de multithreading en C con el compilador cruzado GNU RISC-V.

Estoy utilizando la herramienta homebrew-riscv en una máquina Mac.

Quiero compilar un programa de multihilo simple que está escrito utilizando la biblioteca pthread en C utilizando el compilador cruzado de riscv-gnu. Para esto, he usado el siguiente comando:

riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 pthreadExample.c -o pthreadExample -lpthread

Y he obtenido la siguiente advertencia y error:
 
advertencia: declaración implícita de la función ‘pthread_create’ [-Wimplicit-function-declaration]
   32 | pthread_create(&tid, NULL, myThreadFun, (void *)&tid);
     |  ^ ~ ~ ~ ~ ~ ~ ~ ~ ~
pthreadExample.c:34:5: advertencia: declaración implícita de la función ‘pthread_exit’ [-Wimplicit-function-declaration]
   34 | pthread_exit(NULL);
     | ^ ~ ~ ~ ~ ~ ~
/opt/homebrew/Cellar/riscv-gnu-toolchain/master/lib/gcc/riscv64-unknown-elf/11.1.0/../../../../riscv64-unknown-elf/bin/ld: no se puede encontrar -lpthread
collect2: error: ld devolvió 1 estado de salida

¿Alguien tiene alguna idea para resolver este error? ¿O debería utilizar otra opción en lugar de -lpthread para compilar?

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error es causado por el enlazador que no puede encontrar la biblioteca pthread. Para solucionar esto, puedes intentar agregar la ruta de la biblioteca pthread al comando utilizando la opción -L, de esta manera:

    riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 pthreadExample.c -o pthreadExample -L/ruta/a/la/biblioteca/pthread -lpthread

    Reemplaza /ruta/a/la/biblioteca/pthread con la ruta real de la biblioteca pthread en tu máquina.

    Si no estás seguro de dónde se encuentra la biblioteca, puedes utilizar el siguiente comando para buscarla:

    find / -name libpthread.a

    Esto buscará el archivo de la biblioteca llamado libpthread.a en todos los directorios a partir del directorio raíz (/).

    Alternativamente, puedes intentar usar la opción -pthread en lugar de -lpthread:

    riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 pthreadExample.c -o pthreadExample -pthread

    Esta opción debería enlazar automáticamente con la biblioteca pthread y establecer cualquier bandera de compilador necesaria.

    ¡Espero que esto te ayude!

Comments are closed.