APUE上的一個例子
[cpp]
#include "apue.h"
#include <pthread.h>
#include <unistd.h>
pthread_t ntid;
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);
}
用gcc編譯時出現如下錯誤: www.2cto.com
11_1.c:(.text+0x2e6): undefined reference to `pthread_create'
之前使用<math.h>頭文件中的函數也預到過類似的問題,那時是在編譯是加上"-lm"選項.
而此處產生這個問題原因是:pthread 庫不是 Linux 系統默認的庫,連接時需要使用靜態庫 libpthread.a,所以在使用pthread_create()創建線程,和其他一些與線程操作相關的函數時,需要鏈接該庫。
解決方法:
(1)編譯時加上 -lpthread選項.即: gcc 11_1.c -lpthread
(2)gcc -lrt 11_1.c (這個在網上看的有點不大理解)