elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda para compilar este código C en Linux (error referencia a "" sin definir)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para compilar este código C en Linux (error referencia a "" sin definir)  (Leído 11,525 veces)
ShadowA7X

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Ayuda para compilar este código C en Linux (error referencia a "" sin definir)
« en: 13 Noviembre 2015, 18:51 pm »

Que tal chicos. muchas gracias de antemano por darse el tiempo de leer esto. Verán, quiero ejecutar un programa que hice hace 1 año (y que en ese tiempo funcionaba correctamente). Ahora cuando lo intento compilar me salen los siguentes errores (todos por lo visto haciendo referencia a lo mismo):

referencia a "sem_init" sin definir
referencia a "sem_post" sin definir
referencia a "pthread_create" sin definir
referencia a "pthread_join" sin definir
referencia a "sem_wait" sin definir

Esos son. Se repiten varias veces. Soy muy amateur en el tema y no se por qué ahora (en comparación al año pasado) no puedo compilarlo y no se qué debo hacer para ejecutarlo. Por cierto, estoy trabajando en Ubuntu.

Código
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <stdlib.h>
  5. #include <errno.h>
  6. #include <pthread.h>
  7. #include <semaphore.h>
  8. #define Max_Clientes 25 // El número máximo de hebras clientes.
  9.  
  10.  
  11. // Prototipos de funciones...
  12.  
  13. void *clientes(void *num);
  14. void *barbero(void *);
  15. void rango_espera(int secs);
  16.  
  17. //Se definen los semaforos.
  18. //El curto_espera pone el limite del numero de clientes que se permiten ingresar al cuarto de espera en un tiempo determinado.
  19. sem_t cuartoespera;
  20. // La SillaBarbero asegura la mutua exclusividad en el acceso a la silla del barbero.
  21. sem_t SillaBarbero;
  22. // AlmohadaBarbero es usada para permitir que el barbero descanse hasta que llegue el cliente.
  23. sem_t AlmohadaBarbero;
  24. // CinturonAsiento es usada para hacer que el cliente espere hasta que el barbero haya cortado su cabello.
  25. sem_t CinturonAsiento;
  26. // Bandera que para la hebra del barbero cuando todos los clientes han sido atentidos.
  27. int Todohecho = 0;
  28. int clientesBarberia=0;
  29. int numSillas;
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.    int i;
  34.    pthread_t btid;
  35.    pthread_t tid[Max_Clientes];
  36.    int numClientes;
  37.    int Numero[Max_Clientes];
  38.    printf("El &#324;umero maximo de clientes es 25. Ingresa el numero de clientes y sillas.\n");
  39.  
  40.    do{
  41.    scanf("%d",&numClientes);
  42.    scanf("%d",&numSillas);
  43.  
  44.    if(numClientes > Max_Clientes)printf("El nº de clientes debe ser menor a %d, ingrese nº de clientes y sillas nuevamente.\n",Max_Clientes);
  45.  
  46.   }while(numClientes>Max_Clientes);
  47.  
  48.    if (numClientes > Max_Clientes) {
  49.       printf("El Maximo numero de Clientes es %d.\n", Max_Clientes);
  50.       /******system("PAUSE");*****************/
  51.       getchar();
  52.       getchar();
  53.  
  54.       return 0;
  55.    }
  56.    printf("Una solucion al problema del barbero dormilon usando semaforos.\n");
  57.    for (i = 0; i < Max_Clientes; i++) {
  58.        Numero[i] = i;
  59.    }
  60.    // Se inicializa el semaforo con valores iniciales...
  61.    sem_init(&cuartoespera, 0, numSillas);
  62.    sem_init(&SillaBarbero, 0, 1);
  63.    sem_init(&AlmohadaBarbero, 0, 0);
  64.    sem_init(&CinturonAsiento, 0, 0);
  65.  
  66.    // Se Crea el Barbero.
  67.    pthread_create(&btid, NULL, barbero, NULL);
  68.  
  69.    // Se Crea el Cliente.
  70.    for (i = 0; i < numClientes; i++) {
  71.        pthread_create(&tid[i], NULL, clientes, (void *)&Numero[i]);
  72.    }
  73.    // Se juntan las hebras a esperar que las otras terminen.
  74.    for (i = 0; i < numClientes; i++) {
  75.        pthread_join(tid[i],NULL);
  76.    }
  77.    // Cuando todos los clientes hayan terminado, se elimina la hebra barbero.
  78.    Todohecho = 1;
  79.    sem_post(&AlmohadaBarbero); // Se despierta al barbero en la salida.
  80.    pthread_join(btid,NULL);
  81.    getchar();
  82.    getchar();
  83.    return 0;
  84. }
  85.  
  86. void *clientes(void *Numero) {
  87.     int num = *(int *)Numero; // Sale de la tienda y toma algún periodo de tiempo aleatorio para llegar.
  88.     printf("hebra %d creada\n", num);
  89.     rango_espera(5);
  90.     if(numSillas+1==clientesBarberia)printf("cliente %d llega a la barberia\nEl cliente abandona la barberia porque esta llena\n", num); // Espere hasta que haya espacio para abrir en la sala de espera...
  91.     sem_wait(&cuartoespera);
  92.    printf("cliente %d llega a la barberia \ncliente %d entra a la sala de espera.\n************************************Hay %d clientes en la barberia \n", num, num,++clientesBarberia); // Esperar a que la silla del barbero este libre..
  93.  
  94.     //printf("*****************************************\n");
  95.    // printf("**Hay %d clientes en la barberia       **\n",clientesBarberia);
  96.    // printf("*****************************************\n");
  97.     sleep(10);
  98.     sem_wait(&SillaBarbero); // Si la silla esta libre entonces abandona su lugar en la sala de espera..
  99.     sem_post(&cuartoespera); // Despierta el Barbero...
  100.     printf("cliente %d llama al barbero.\n", num);
  101.     sem_post(&AlmohadaBarbero); // Espera a que el barbero termine de cortar su pelo.
  102.     sem_wait(&CinturonAsiento); // Deja la silla.
  103.     sem_post(&SillaBarbero);
  104.   printf("cliente %d deja la barberia.\n************************************Hay %d clientes en la barberia\n", num,--clientesBarberia);
  105.  
  106.    // printf("*****************************************\n");
  107.    // printf("**Hay %d clientes en la barberia **\n",clientesBarberia);
  108.     //printf("*****************************************\n");
  109.     sleep(10);
  110. }
  111.  
  112. void *barbero(void *junk)
  113. {
  114. // Mientras todavía hayan clientes que atender... El barbero es omniciente y puede decir si hay clientes aún en el camino a su tienda.
  115.  
  116.  while (!Todohecho) { // Esperar hasta que alguien llegue y te despierte..
  117.    if( clientesBarberia==0 ) printf("el barbero esta jugando\n");
  118.    sem_wait(&AlmohadaBarbero); // Omitir todo esto al final...
  119.    if (!Todohecho)
  120.    { // Tomar un monto aleatorio de tiempo para cortar el cabello del cliente..
  121.     printf("el barbero esta cortando el cabello\n");
  122.     rango_espera(3);
  123.     printf("el barbero ha terminado de cortar el cabello.\n"); // Se libera al cliente cuando ya se le haya cortado el pelo...
  124.     sem_post(&CinturonAsiento);
  125.    }
  126.    else {
  127.         printf("El barbero ha terminado por el dia.\n");
  128.    }
  129.   }
  130. }
  131.  
  132. void rango_espera(int secs) {
  133.     int len = 1; // Se genera un numero arbitrario...
  134.     sleep(len);
  135. }


Esa es mi duda, de antemano muchas gracias!


« Última modificación: 13 Noviembre 2015, 18:54 pm por ShadowA7X » En línea

ShadowA7X

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Ayuda para compilar este código C en Linux (error referencia a "" sin definir)
« Respuesta #1 en: 13 Noviembre 2015, 19:18 pm »

Ya lo solucioné. Recordé que el modo en el cual se compila cuando se usan hebras y semáforos es diferente. Por eso me daba error a cada rato.

Acá dejo la solución para quien tenga un problema similar al mio:

https://foro.elhacker.net/programacion_cc/consulta_referencia_a_pthreadcreate_sin_definir-t389918.0.html


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] Ayuda con este script sobre "if exist" y "takeown" (SOLUCIONADO)
Scripting
SuperDraco 4 11,842 Último mensaje 30 Noviembre 2009, 21:05 pm
por Angel Doze
ayuda para crear un codigo "porfa"??
Scripting
carwen 0 1,857 Último mensaje 3 Noviembre 2011, 00:55 am
por carwen
Ayuda para "convertir" este VBS a BATCH
Scripting
Eleкtro 4 3,619 Último mensaje 7 Noviembre 2011, 10:09 am
por Eleкtro
Escritoro inaccesible: Error de "ATBroker.exe" "Explorer.exe" y "Taskmgr.exe".
Windows
Eleкtro 6 12,268 Último mensaje 1 Diciembre 2011, 14:15 pm
por .:UND3R:.
Referencia a "pow" sin definir Lubuntu [solucionado]
Programación C/C++
JavierScars 4 10,428 Último mensaje 7 Octubre 2015, 17:07 pm
por JavierScars
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines