pthread库未定义的引用

时间:2013-02-27 14:58:34

标签: c

我在Fedora 17上使用eclipse(使用GCC)并且我在pthread_create()上有一个未定义的引用,即使包含pthread.h并且我在gcc构建命令行上有-lpthread ...

这是我的代码,以防万一

void* repair()
{
    int var;
    for ( var = 0; var < NB_ITER ; var += 2 )
    {
        printf( "PAIR : %d\n", var );
    }

return NULL;
} // pair

void exo03()
{
    pthread_t id1;
    pthread_create(&id1, NULL, &repair, NULL);
}

感谢您的帮助:)

2 个答案:

答案 0 :(得分:8)

在linux,FreeBSD(和其他一些* nix版本)上你应该使用编译器选项-pthread而不是尝试链接到pthread库。

eclipse

  

Eclipse未配置为将-pthread参数放在gcc中   汇编。要解决此问题,请转到菜单:

     

项目 - &gt;特性

     

c / c ++ build - &gt; GCC C编译器 - &gt;其它

     

将“-pthread”参数添加到“Other Flags”的开头

     

也请转到:

     

c / c ++ build - &gt;设置 - &gt; GCC C Linker - &gt;图书馆

     

将“pthread”库包含在其他库中。单击“应用并重建”   该项目。 Pthreads现在必须工作。

来自man gcc

  

-pthread:使用pthreads库添加对多线程的支持。此选项为预处理器和链接器设置标志。

我找到了explanation here

  

在GCC中, -pthread (又名-pthreads)选项管理编译器   preprocessor /和/ linker,用于启用Posix线程的编译。   预处理器将定义/启用/使用某些Posix线程版本   宏(或执行条件编译以启用Posix线程   逻辑),链接器将专门链接结果对象   反对libpthread

     

但是, -lpthread 只是告诉链接器尝试解析任何问题   对libpthread库的外部引用,以相同的方式   -lm告诉链接器尝试解析任何外部   对libm库的引用。对于-lpthread,您的代码可能会   即使您编写了Posix,也不包含对libpthread的外部引用   线程代码,因为关键宏尚未打开。

答案 1 :(得分:4)

您是否已链接到libpthread?

$> gcc ... -lpthread