c - 使用 gcc 线程的 POSIX 程序问题

标签 c multithreading unix pthreads posix

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

/tmp/ccw594wa.o: 在函数 main' 中: POSIX.c:(.text+0xda): undefined reference pthread_create' POSIX.c:(.text+0x102): 未定义对“pthread_create”的引用 collect2: ld devolvió el estado 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);
  }  

最佳答案

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

关于c - 使用 gcc 线程的 POSIX 程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919724/

相关文章:

c++ - 判断一个数是否具有 P^Q 形式?

c - 在C中的链表的末尾或开头添加节点

c++ - 在 C/C++ 中搜索大文件中的数据

java - 关于线程和对象创建

java - 这是 Java 中线程安全延迟加载单例的良好实现吗?

bash - 如何仅打印我当前所在的当前目录

linux - 在 UNIX 时间戳 Shell/Bash 中使用时区转换日期

c - 尝试刷新缓存时出现段错误(核心转储)错误

c# - 通过事件进行线程更新主屏幕

shell - Unix tar : do not preserve full pathnames