C

gcc不能連結到pthread?

  • November 20, 2015

我最近安裝了 XUbuntu 11.10 64bit,但在編譯最簡單的 pthread 範例時遇到問題。

這是程式碼pthread_simple.c

#include <stdio.h>
#include <pthread.h> 
main()  {
 pthread_t f2_thread, f1_thread; 
 void *f2(), *f1();
 int i1,i2;
 i1 = 1;
 i2 = 2;
 pthread_create(&f1_thread,NULL,f1,&i1);
 pthread_create(&f2_thread,NULL,f2,&i2);
 pthread_join(f1_thread,NULL);
 pthread_join(f2_thread,NULL);
}
void *f1(int *x){
 int i;
 i = *x;
 sleep(1);
 printf("f1: %d",i);
 pthread_exit(0); 
}
void *f2(int *x){
 int i;
 i = *x;
 sleep(1);
 printf("f2: %d",i);
 pthread_exit(0); 
}

這是編譯命令

gcc -lpthread pthread_simple.c

結果:

lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c
/tmp/ccmV0LdM.o:在函式“主”中:
pthread_simple.c:(.text+0x2c): 對“pthread_create”的未定義引用
pthread_simple.c:(.text+0x46): 對“pthread_create”的未定義引用
pthread_simple.c:(.text+0x57): 對“pthread_join”的未定義引用
pthread_simple.c:(.text+0x68): 未定義對“pthread_join”的引用
collect2: ld 返回 1 個退出狀態

有誰知道是什麼導致了這個問題?

在最新版本的gcc編譯器中,庫需要遵循對像或源文件。

所以編譯它應該是:

gcc pthread_sample.c -lpthread

通常雖然 pthread 程式碼是這樣編譯的:

gcc -pthread pthread_sample.c
gcc -o exectable_namme pthread_sample.c -lpthread

引用自:https://unix.stackexchange.com/questions/33396