错误:/tmp/ccOB6cIT.o:在函数“main”中:example.c:(.text+0x4a)

错误:/tmp/ccOB6cIT.o:在函数“main”中:example.c:(.text+0x4a)

我从练习文件中选取了以下代码

#include <stdio.h>
#include <pthread.h>
void *kidfunc(void *p) 
{
printf ("Kid ID is ---> %d\n", getpid( ));
}
int main(int count, char* argv[])
{
pthread_t kid ;
pthread_create (&kid, NULL, kidfunc, NULL) ;
printf ("Parent ID is ---> %d\n", getpid( )) ;
pthread_join (kid, NULL) ;
printf ("No more kid!\n") ;
return 0;
}

但是当我在笔记本电脑(运行 Ubuntu 14.04)上编译它时,它会产生以下错误:

ahsan-15f8116@VirtualWorld:~$ gcc example.c
/tmp/ccOB6cIT.o: In function `main':
example.c:(.text+0x4a): undefined reference to `pthread_create'
example.c:(.text+0x71): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status

这对我来说没有任何意义,因为标题包含pthread.h,你能告诉我我在这里做错了什么吗?

答案1

仅限标题宣布函数,它是定义他们。

通常,您需要在gcc命令行上显式添加要链接的库,例如gcc -o prog prog.c -lm数学库libm。但是,该pthread库是一种特殊情况 - 它由特殊的编译器标志链接-pthread

gcc -pthread example.c

man gcc

-pthread
    Adds support for multithreading with the pthreads library.  This
    option sets flags for both the preprocessor and linker.

答案2

简单...使用 libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c

$ ./EXAMPLE
Parent ID is ---> 9280          
Kid ID is ---> 9280             
No more kid!

相关内容