Process 编程调试

process.c:(.text+0xf5): undefined reference to `pthread_create'

process.c:(.text+0x133): undefined reference to `pthread_join'

collect2: error: ld returned 1 exit status


线程程序编译过程中,出现以上报错。百思不解其解。


转自http://www.shangxueba.com/jingyan/84321.html

问题原因:

pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。

问题解决:

在编译中要加 -lpthread参数

gcc thread.c -o thread -lpthread

thread.c为你些的源文件,不要忘了加上头文件#include

以上运行成功。代码如下:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int nthreads = 1;       /* 线程执行函数,传入参数为线程序号,传出参数为项: (序号+1) */
void *dowork (void *params)
{
        int j = *(int *)params;
        int term = j+1;
        *(int *)params = term;
        printf ("the thread [%d]: term =%d\n",j,term);
}
void main(int argc,char **argv)
{
        int i;
        pthread_t threads[100];
        int pthread_data[100];
        float mean = 0;         /* 平均数 */
        float variance = 0; /* 方差 */
        if(argc==2)
                nthreads = atoi (argv[1]); /* 将命令行字符串参数转换为整数 */
                for (i=0; i<nthreads; i++) {
                pthread_data [i] = i ;
                pthread_create(&threads[i],NULL,dowork,&pthread_data[i]);            /* 创建线程 */
        }
        for (i=0; i<nthreads; i++) {
                pthread_join (threads [i], NULL);                       /* 等待子线程结束,汇合结果 */
                mean +=(float)pthread_data[i];
        }
        mean = mean / nthreads;
        for(i=0; i<nthreads; i++) {
                variance += (float)(pthread_data[i]-mean)*(pthread_data[i]-mean);
        }
        variance = variance / nthreads;
        printf("The total threads is %d\n",nthreads);
        printf("The mean = %f\n", mean);
        printf("The variance = %f\n",variance);
}

你可能感兴趣的:(c,process,编程调试)