1. 程式人生 > >Linux下undefined reference to pthread create 問題解決

Linux下undefined reference to pthread create 問題解決

               

接觸了Linux系統程式設計中的執行緒程式設計模組,可gcc sample.c(習慣把書上的sample程式碼寫進sample.c檔案中)出現“undefined reference to ‘pthread_create’”,所有關於執行緒的函式都會有此錯誤,導致無法編譯通過。

問題的原因:pthread不是Linux下的預設的庫,也就是在連結的時候,無法找到phread庫中哥函式的入口地址,於是連結會失敗。

解決:在gcc編譯的時候,附加要加 -lpthread引數即可解決。

#include <stdio.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); } int main(void) {     int err;     err = pthread_create(&ntid,NULL,thr_fn,NULL);     if(err != 0)         printf("pthread_create error \n");     printids("main thread:");     sleep(1);     return 0; }

[email protected]:/code/pthreadid# gcc sample.c/tmp/cc1WztL9.o: In function `main’:sample.c:(.text+0×83): undefined reference to `pthread_create’collect2: ld returned 1 exit status

[email protected]:/code/pthreadid# gcc -lpthread sample.c[email protected]:/code/pthreadid# ./a.outmain thread: pid 7059 tid 3078141632 (0xb778b6c0)new thread: pid 7059 tid 3078138736 (0xb778ab70)

本文完 2012-07-15

由於是Linux新手,所以現在才開始接觸執行緒程式設計,照著GUN/Linux程式設計指南中的一個例子輸入編譯,結果出現如下錯誤:undefined reference to 'pthread_create'undefined reference to 'pthread_join'問題原因:   pthread 庫不是 Linux 系統預設的庫,連線時需要使用靜態庫 libpthread.a,所以在使用pthread_create()建立執行緒,以及呼叫 pthread_atfork()函式建立fork處理程式時,需要連結該庫。問題解決:    在編譯中要加 -lpthread引數    gcc thread.c -o thread -lpthread    thread.c為你些的原始檔,不要忘了加上標頭檔案#include<pthread.h>