无法在Linux上编译带有Sleep()的C ++代码 - 包含哪个库?

时间:2014-09-25 20:21:05

标签: c++ linux sleep

我正在尝试编译一些使用该行的代码:

Sleep(10);

在我的IDE中,我所要做的就是写:

using namespace std;

#include <unistd.h>

它编译得很好!

但是,在Linux上通过命令行进行编译时,一切都确定。编译器告诉我Sleep未定义。我使用编译:

g++ -lglut -lGL -lm -o PROGRAM.exe PROGRAM.cpp

我编写的其他不使用Sleep的代码以这种方式编译好。

我需要向链接器(使用-l)提供哪些库才能识别Sleep函数?

4 个答案:

答案 0 :(得分:10)

C ++ 11为标准库带来了并发和休眠功能。 Sleepusleep 可移植。请改用标准库中的sleep实用程序。

#include <thread>
#include <chrono>

int main() {
    using namespace std::literals;
    std::this_thread::sleep_for(10s);
}

此处还使用了C ++ 14 standard literal s秒(使用命名空间std::literals引入)。 10s相当于std::chrono::seconds(10)

其他持续时间也有相应的标准文字,例如: msusns

不需要使用上面的内容向链接器提供库。

Live example

答案 1 :(得分:6)

Sleep是一个Windows函数。在Unix上使用usleep。请注意,usleep需要微秒,而不是毫秒。

答案 2 :(得分:1)

为了提供便携性,您必须使用:

#ifdef _WIN32
    Sleep(10);
#else
    sleep(10);
#endif

否则,如果你有C ++ 11,请考虑@Snps的答案。

答案 3 :(得分:0)

您需要使用小写s而不是大写S。您的函数名称将是sleep()而不是Sleep()