- #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
转自:http://blog.csdn.net/silentpebble/article/details/6906117