使用带有gcc的线程与POSIX程序混淆

时间:2012-03-29 05:46:55

标签: c multithreading unix pthreads posix

我必须使用带有gcc的POSIX线程执行程序,当我尝试编译它时,终端显示如下消息:

/tmp/ccw594wa.o:在函数main': POSIX.c:(.text+0xda): undefined reference to pthread_create'中 POSIX.c :(。text + 0x102):对`pthread_create'的未定义引用 collect2:lldvolvióelestado de salida 1

有人可以帮我识别错误原因吗?程序必须实现生产者 - 消费者算法才能完成一些任务,我的代码(未完成)是下一个任务

  #include "stdio.h"
  #include "pthread.h"
  #define p printf
  #define s scanf

  pthread_mutex_t exmut;
  float suma=0;
  float x;
  int iteraciones;

  void *h_productor (void *arg)  /*Procedimiento del productor*/
  {
  }

  void *h_consumidor (void *arg) /*Procedimiento del consumidor*/
  {
  }

  main()  /*Hilo principal*/
  {
     int error;
     int *out, idp=1, idc=2;
     pthread_t productor;      /*Hilo que realiza el proc. del productor*/
     pthread_t consumidor;     /*Hilo que realiza el proc. del consumidor*/ 
     p ("\n\n    Cálculo de e^x, por medio de una serie infinita... =)!");
     p ("\n\n  x= ");
     s ("%f",&x);
     do
     {
        p ("  No. de iteraciones: ");
        s ("%d",&iteraciones);
        if (iteraciones<1 || iteraciones>10)
           p("\n Número no válido, debes introducir un valor de entre 1 y 10\n");
     }
     while (iteraciones<1 || iteraciones>10);

     pthread_mutex_init (&exmut, NULL);
     /*Creamos ambos hilos, tanto el productor como el consumidor*/
     error = pthread_create (&productor,NULL,h_productor,&idp);
     error = pthread_create (&consumidor,NULL,h_consumidor,&idc);
     /*
     /*Esperamos a que ambos hilos terminen/
     error = pthread_join (h_productor,(void **)&out);
     error = pthread_join (h_consumidor,(void **)&out);
   */
     p ("\n  La aproximación para %d iteraciones del valor de e^%f= %f",iteraciones,x,suma);
  }  

2 个答案:

答案 0 :(得分:2)

您可以尝试使用-pthread选项进行编译,该选项告诉gcc链接到pthread库。

答案 1 :(得分:1)

尝试:
    gcc -pthread -o test test.c