C
gcc不能連結到pthread?
我最近安裝了 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