2012-03-21 65 views
7

我有這樣的代碼:未定義參考在pthread_create

#include <stdio.h> 
#include <pthread.h> 

void* cuoco(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cuoco\n"); 
    fprintf(stderr,"Fine codice cuoco\n"); 
    return NULL; 
} 

void* cameriere(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cameriere\n"); 
    fprintf(stderr,"Fine codice cameriere\n"); 
    return NULL; 
} 

void* cliente(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cliente\n"); 
    fprintf(stderr,"Fine codice cliente\n"); 
    return NULL; 
} 

int main(int argc, char* argv[]) 
{ 
    void* (*routine)(void*); 
    routine=cuoco; 
    pthread_t thread_cuoco,thread_cameriere,thread_cliente; 
    pthread_create(&thread_cuoco,NULL,routine,NULL); 
    return 0; 
} 

而在編譯器選項我插入-lpthread
但它說:
「未定義的引用給pthread_create」
我使用Ubuntu 10.10 ,所以我已經安裝了pthread庫,我找不出這個錯誤的原因。

+0

向我們展示如何編譯您的程序。 – cnicutar 2012-03-21 10:56:43

+0

你是如何添加鏈接器選項的?在哪裏?哪個版本的Code :: Blocks? – 2012-03-21 11:20:35

回答

28

使用-lpthread作爲最後的編譯器標誌。

例如: gcc -o sample sample.c -lpthread

+0

我已經把這個選項。 – 2012-03-21 11:01:20

+1

@RamyAlZuhouri不,你不知道。您可能已經對代碼塊設置進行了修改。 +1反擊錯誤的投票。 – cnicutar 2012-03-21 11:05:20

+0

是的,我已經把它放在設置 - >編譯器和調試器 - >(編譯器設置選項卡) - >其他選項。 – 2012-03-21 11:21:30

13

沒有看到的編譯器命令,我懷疑-lpthread是不是結束。庫需要放置在編譯器命令的結束:

GCC main.c中-lpthread

然而,使用-pthread代替-lpthread,如-pthread可以添加其他設置(例如定義宏_REENTRANT例如)。

+0

我用code :: blocks編譯它,在C :: B選項中,現在我用_-pthread_改變了_-lpthread_,但沒有任何改變。 這是我在設置中唯一的選項。 – 2012-03-21 11:02:45

+0

我不熟悉code :: blocks,但是你可以嘗試一個完整的源代碼重建嗎? – hmjd 2012-03-21 11:03:51

4

使用此命令:

-pthread的gcc -o主要的main.c

-2

找到了解決辦法傢伙:d 只是去設置>> >>編譯連接選項卡>>添加LIB 去開車去到lib文件夾,找到「x86_64_linux_gnu」,找到「並行線程」 享受:)

0

在Eclipse中,你應該添加串並行線程。

項目 - >屬性 - > C/C++編譯 - >設置 - >工具設置 - > GCC鏈接器 - >庫 - >庫(-l) - >添加 - >並行線程

在此之後生成項目。

+1

但是OP在評論中說他使用的是Code :: Blocks,而不是Eclipse。 – 2016-05-15 13:08:16