【问题标题】:C - Implicit declaration of the function "pthread_timedjoin_np"C - 函数“pthread_timedjoin_np”的隐式声明
【发布时间】:2014-03-27 16:30:33
【问题描述】:

我正在将一个 Windows 库移植到 linux。我需要使用定时加入来等待线程加入特定的超时时间。

当我在 Linux 上编译库时,我收到了警告

函数的隐式声明 - pthread_timedjoin_np

我已包含 pthread.h 并已使用 -lpthread 链接进行编译。我知道 pthread_timedjoin_np 是一个非标准的 GNU 函数。该函数首次出现在 glibc 的 2.3.3 版本中。在 BCD v6 中的某个地方。

我什至检查了 Linux 的 Man Page,但没有得到任何帮助。如何避免此警告?有什么帮助吗?

Edit-1: 我的系统是 RedHat 5。

【问题讨论】:

  • 这是 c++ 还是 c?如果是 c++,请使用新的 C++0x 标准 std::thread 类,它将是可移植的,您不必担心它并删除 c 标签。如果是C,请去掉c++标签。
  • 抱歉,是C!我误用了标签。让我删除它!
  • 你定义了#define _GNU_SOURCE
  • 你在#define _GNU_SOURCE 之前 #include <pthread.h> 吗?
  • 对不起,我的回答错了。检查here,是否在包含任何标题之前定义了_GNU_SOURCE?您也可以将其添加到编译器命令中,-D_GNU_SOURCE

标签: c linux multithreading redhat porting


【解决方案1】:

确保#define _GNU_SOURCE 位于您的任何标题之前。宏由<features.h> 设置,其中包括 GNU C 库的各个部分。如果您在定义 _GNU_SOURCE 之前已包含其他标头,则 <features.h> 将已包含并且不会看到 _GNU_SOURCE

更简单,只需使用编译器添加-D_GNU_SOURCE 作为编译器标志来定义它。

【讨论】:

  • @jparthj 你能展示你的代码(至少在你包含标题的地方)和你用来编译这个文件的命令吗?
  • @Collin,我也遇到了同样的问题,你的回答解决了!!谢谢。正如你所说,#define _GNU_SOURCE 必须在包含的任何标题之前。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多