#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void
printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid = [%u] tid = [%u] [0x%x]\n",
s, (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
}
void *
thr_fn(void *arg)
{
printids("new thread:");
return ((void *)0);
}
int
main()
{
pthread_t ntid;
int err;
err = pthread_create(&ntid, NULL, thr_fn, NULL);
if(err != 0)
printf("不能创建线程[%s]\n",strerror(err));
printids("main thread:");
sleep(3);
exit(0);
}
[root@localhost pthread]# gcc test.c -o test
/tmp/ccq2Mbxs.o: In function `main':
test.c:(.text+0x89): undefined reference to `pthread_create'
collect2: ld 返回 1
[root@localhost pthread]#
问题原因:
pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。
问题解决:
在编译中要加 -lpthread参数
gcc test.c -o test -lpthread
版权声明:本文为silentpebble原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。