Ayuda con pthread

Imagen de miguelex
0 puntos

Hola a todos. Este es mi primer mensaje y no se si es el subforo indicado pero desde luego es el que mas se parece, asi que lo dejo aqui y pido disculpas si no es asi.

Estoy haciendo en C un programa que pide el nombre de un directorio y que crea otros tres procesos. Uno de ello lleva un hilo para leer por teclado. La cosa es que en mi portatil funciona de maravilla, sin problemas y si nada. Pero si me conceto remotamente a un servidor mediante SSH, al ejecutar el mismo Makefile que uso en mi portatil me sale esto:

gcc salida.c -o salida.exe -lpthread -lm
In file included from salida.c:10:
/usr/include/pthread.h:285: error: tipos en conflicto para âpthread_tâ
/usr/include/bits/pthreadtypes.h:36: error: la declaración previa de âpthread_tâ estaba aquí
/usr/include/pthread.h:286: error: tipos en conflicto para âpthread_attr_tâ
/usr/include/bits/pthreadtypes.h:43: error: la declaración previa de âpthread_attr_tâ estaba aquí
/usr/include/pthread.h:287: error: tipos en conflicto para âpthread_key_tâ
/usr/include/bits/pthreadtypes.h:109: error: la declaración previa de âpthread_key_tâ estaba aquí
/usr/include/pthread.h:289: error: tipos en conflicto para âpthread_mutexattr_tâ
/usr/include/bits/pthreadtypes.h:79: error: la declaración previa de âpthread_mutexattr_tâ estaba aquí
/usr/include/pthread.h:290: error: tipos en conflicto para âpthread_mutex_tâ
/usr/include/bits/pthreadtypes.h:73: error: la declaración previa de âpthread_mutex_tâ estaba aquí
/usr/include/pthread.h:291: error: tipos en conflicto para âpthread_condattr_tâ
/usr/include/bits/pthreadtypes.h:105: error: la declaración previa de âpthread_condattr_tâ estaba aquí
/usr/include/pthread.h:292: error: tipos en conflicto para âpthread_cond_tâ
/usr/include/bits/pthreadtypes.h:99: error: la declaración previa de âpthread_cond_tâ estaba aquí
/usr/include/pthread.h:293: error: tipos en conflicto para âpthread_rwlockattr_tâ
/usr/include/bits/pthreadtypes.h:142: error: la declaración previa de âpthread_rwlockattr_tâ estaba aquí
/usr/include/pthread.h:294: error: tipos en conflicto para âpthread_rwlock_tâ
/usr/include/bits/pthreadtypes.h:136: error: la declaración previa de âpthread_rwlock_tâ estaba aquí
/usr/include/pthread.h:357: error: tipos en conflicto para âpthread_killâ
/usr/include/bits/sigthread.h:36: error: la declaración previa de âpthread_killâ estaba aquí
make: *** [salida] Error 1

Y no me crea salida.exe y no puedo ejecutar el programa. Lo mas curioso de todo es que con otro programa que usa pthread, su propio Makefile lo compila y crea el ejecutable, asi que teoricamente el problema no es la no existencia de pthread.h

A ver si alguien me puede decir algo, que me estoy dejando los ojos mirando

Imagen de sansatan
+1
0
-1

¿Puede ser la codificación de los archivos? Cámbialos de UTF-8 a ISO8859-15

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de miguelex
+1
0
-1

Mañana te respondo, que no tengo acceso al servidor remoto ahora mismo

+1
0
-1
Imagen de miguelex
+1
0
-1

Pues no. Cambie la codificacion y sale lo mismo.

+1
0
-1
Imagen de sansatan
+1
0
-1

Compilas en tu máquina un programa y cuando lo compilas en otra te da estos errores.

Puede ser que la versión de pthread, es decir, la librería estandard de C++, sea distinta y algo haya cambiado o haya dejado de ser válido.

¿Es la misma versión de Ubuntu? ¿Están ambos actualizados?

Muestra qué devuelve en cada ordenador:

dpkg -l | grep libstdc

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de sansatan
+1
0
-1

Soy yo otra vez, parece que a más gente le ocurre lo mismo y lo han resuelto desinstalando libpthread-dev.

Quizá tu problema es que sólo lo tienes instalado en el pc que te da los errores, tendrías que desinstalarlo.

Puedes leerlo por ti mismo aquí:

https://bugs.launchpad.net/ubuntu/+source/pth/+bug/81169

Lo que te digo en el post anterior tampoco está mal que lo verfiques.

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de miguelex
+1
0
-1

Primero de todo, gracias por la ayuda. Y ahora por partes.

La parte de dpkg -l | grep libstdc en el portatil lo hare luego (aun tengo que configurar la wifi en Ubuntu) pero en el ordenador remoto que te digo me sale que no reconoce la orden (?).

Lo de desinstarlar libpthread-dev va a ser problematico ya que el servidor es de la universidad y todas las tareas administrativas estan vetadas a lo alumnos. Solo tenemos permisos es cuentas personales.

Otra cosa que dices es si son las mismas versiones de Ubuntu: la mia seguro es 8.04 y la del servidor creo que era 7.10 (no recuerdo que dijeran que la habian cambiado).

¿Podria funcionar que me buscase las librerias para 7.10, ponerla en el portatil y el resultado pasarlo al otro equipo? (igual pregunto una chorrada, pero preguntar es gratis)

+1
0
-1
Imagen de miguelex
+1
0
-1

Definitivamente el problema debe de estar en mi codigo. He creado un programa de prueba y compila creando el ejecutable. ais que voy a repasar bien el codigo.

+1
0
-1
Imagen de sansatan
+1
0
-1

dpkg viene instalado en todos los equipos, es muy extraño que no te lo reconozca. Pregunta al administrador.

Si son versiones distintas, creo que el problema puede ser el que viene en los enlaces, casi seguro. Con dpkg podrás comprobar si lo es o no.

Por último, que con otro código funcione no quiere decir que el problema sea tu código necesariamente. Si el ejemplo que te has escrito para chequear es simple no hará saltar la liebre.

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de miguelex
+1
0
-1

¿te cuento algo gracioso? Si cambio el #include de lugar (en vez de ser la ultiam libreria de entre todos los includes, poniendola la primera o segunda) el programa compila y crea el ejecutable. Luego, al ejecutarlo, no hace lo que deberia, pero por lo menos no da errores.

+1
0
-1
Imagen de sansatan
+1
0
-1

Eso es una buena pista.

¿Con los includes incluyes algun .h tuyo?

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de miguelex
+1
0
-1

No,solo librerias del C, que recuerde ahora mismo, unistd, stdio, sys/stat, signal, phtread y otra sys/norecuerdo (¿msg? la que se usa para colas de mensajes)

+1
0
-1