【问题标题】:fatal error: thread.h: No such file or directory致命错误:thread.h:没有这样的文件或目录
【发布时间】:2015-10-13 00:16:12
【问题描述】:

有什么方法可以访问thread.h文件。

我无法在 Windows 中找到 thread.h 标头,因为线程与操作系统有关。

我尝试使用 pthread.h 一个外部库,但从未找到 thread.h,根据我的教授所说,它在 solaris 中工作。

【问题讨论】:

  • "thread.h" 只是一个文件名。您将不得不告诉我们您实际上要查找的库...此外,仅标记您实际使用的语言。例如,如果您使用 C++,只需包含 <thread> 并完成它;不需要任何第三方的恶作剧。
  • 您在寻找<threads.h> 还是<pthread.h>
  • 准确地说,cygwin 库中缺少threads.h 文件
  • @avinashvp 官方标头是<thread>
  • 好吧,最初编写代码的人一定是使用了某种编译器或其他。你能找出是哪一个吗?

标签: c windows multithreading


【解决方案1】:

这是一个很好的例子,用“C”和“C++”标记一个问题非常容易混淆,因为答案完全不同。

如果您使用 C++11 或更高版本进行编码,那么您应该

#include <thread>

并使用std::thread 类。你会没事的。

如果您使用 C11 或更高版本进行编码,那么您应该

#include <threads.h>

但是,您可能必须等到您的实现支持它。 C11 标准的 § 7.26.1 ¶ 2 说:

定义宏 __STDC_NO_THREADS__ 的实现不需要提供这个头文件,也不需要支持它的任何功能。

您可以通过#ifdef 检查您的实现是否定义了它。至少我的 GCC 可以。

暂时如果不能切换到C++,还是用pthreads之类的第三方线程库吧。

【讨论】:

  • "暂时如果不能切换到C++,就用pthreads之类的第三方线程库吧。" 是不是因为这是非POSIX OS?在这种情况下,添加操作系统相关标签不合适吗?
  • @EOF 你用-std=c11 编译了吗?无论如何,关键是标题尚未得到广泛支持。
  • @iharob 如果您知道,请随时编辑我的问题。我不知道 Windows。
  • 我也不知道,我只是想知道问题上的标签。
  • @5gon12eder nope 应该尝试一下,但我使用的是 cygwin,所以它应该支持 posix 线程,因为我已经使用了运行良好的 pthreads.h 文件。问题仅在于threads.h
【解决方案2】:

thread.h 在 c++ 标准的上下文中没有得到很好的定义。如果你有一个兼容 c++11 的工具链,你需要

#include <thread>

reference documentation 中所述。

预标准工具链可能需要使用 -std=c++0x-std=c++11 编译器标志明确指定标准。


当您将焦点更改为 时,包括 c++ 标头将不起作用。你可以试试pthread.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2021-05-15
    • 2014-10-31
    • 2022-01-11
    • 2021-09-19
    • 2016-06-23
    相关资源
    最近更新 更多