"pthread库未定义引用"

7 浏览
0 Comments

"pthread库未定义引用"

这个问题已经有了答案

在Linux中pthread_create的未定义引用

我在Fedora 17上使用带有GCC的eclipse,在gcc构建命令行上加入-lpthread,即使pthread.h已经包括,我还是会在pthread_create()上有一个未定义的引用...

这是我的代码,以防万一

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);
}

谢谢您的帮助 🙂

admin 更改状态以发布 2023年5月21日
0
0 Comments

你是否链接了libpthread?

$> gcc ... -lpthread

0
0 Comments

在Linux、FreeBSD(和其他一些*nix版本)上,您应该使用编译器选项-pthread而不是尝试链接pthread库。\n对于Eclipse:\nEclipse未配置将-pthread参数放入gcc编译中。要解决此问题,请执行以下操作:\n项目->属性\nC/C++建设->GCC C编译器->杂项\n在“其他标志”的开头添加“-pthread”参数\n同样进入:\nc/c++ build->设置->GCC C链接器->库\n并将“pthread”库包含在其他库中。单击应用并重建该项目。 Pthreads现在必须工作。\n从GCC手册中获取:\n-pthread:添加对使用pthread库进行多线程支持的支持。此选项为预处理器和链接器设置标志。\n我在这里找到了一个解释:\n在GCC中,-pthread(也称为-pthreads)选项管理编译器预处理器/和/链接器以启用使用Posix线程的编译。预处理器将定义/启用/使用某些宏的Posix线程版本(或执行条件编译以启用Posix线程逻辑),而链接器将特定地将结果对象与libpthread链接。\n但是,-lpthread仅告诉链接器尝试解析所有外部引用以针对libpthread库,就像-lm告诉链接器尝试解析所有外部引用以针对libm库一样。对于-lpthread,即使您编写了Posix线程代码,您的代码也可能不包含对libpthread的外部引用,因为关键宏尚未打开。

0