pthread库未定义的引用

Car*_*gro 5 c

我使用的Eclipse在Fedora 17(海湾合作委员会),我对在pthread_create(未定义参考),即使包含pthread.h我若-lpthread在gcc编译命令行上...

这是我的代码,以防万一

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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮忙 :)

Céd*_*ien 8

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

对于日食:

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

项目 - >属性

c/c ++ build - > GCC C编译器 - >其他

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

还去:

c/c ++ build - >设置 - > GCC C链接器 - >库

并将"pthread"库包含到其他库中.单击"应用"并重建项目.Pthreads现在必须工作.

来自man gcc:

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

我在这里找到了一个解释:

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

但是,-lpthread只是告诉链接器尝试解析针对libpthread库的任何外部引用,就像-lm告诉链接器尝试解析针对libm库的任何外部引用一样.对于-lpthread,您的代码可能不包含对libpthread的外部引用,即使您编写了Posix线程代码,因为关键宏尚未打开.


bas*_*h.d 5

你有链接到 libpthread 吗?

$> gcc ... -lpthread
Run Code Online (Sandbox Code Playgroud)