【问题标题】:pthread library undefined reference [duplicate]pthread库未定义参考[重复]
【发布时间】:2013-02-13 10:43:54
【问题描述】:

我在 Fedora 17(带有 GCC)上使用 eclipse,并且我在 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);
}

感谢您的帮助:)

【问题讨论】:

  • 你可能忘记链接 pthread 库了。在你的编译命令中添加-lpthread作为最后一个。
  • 你能提供一个完整的例子和编译器命令+错误的确切注释吗?

标签: c


【解决方案1】:

在 linux、FreeBSD(和其他一些 *nix 风格)上,您应该使用编译器选项 -pthread,而不是尝试与 pthread 库链接。

对于eclipse

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

项目 -> 属性

c/c++ build -> GCC C 编译器 -> Miscellaneous

将“-pthread”参数添加到“其他标志”的开头

也可以去:

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

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

来自man gcc

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

我找到了explanation here

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

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

【讨论】:

  • 为什么不链接 libpthread?
  • @bash.d : 因为没有 -pthread 选项,编译器和链接器将无法找到正确的 pthread 库:)
  • 好的,谢谢,我忘记了!
  • 先写lpthread选项重要吗?因为现在,我有这个:gcc .... -O0 -g3 -Wall -lpthread -c -fmessage-length=0(Eclipse 设置,我刚刚添加了 -lpthread)
  • @Hahuha :我在回答中添加了在 eclipse 中执行此操作的方式
【解决方案2】:

你链接到 libpthread 了吗?

$> gcc ... -lpthread

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2011-12-13
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多