2012-03-21 66 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