我正在尝试编译一些使用该行的代码:
Sleep(10);
在我的IDE中,我所要做的就是写:
using namespace std;
或
#include <unistd.h>
它编译得很好!
但是,在Linux上通过命令行进行编译时,一切都不确定。编译器告诉我Sleep
未定义。我使用编译:
g++ -lglut -lGL -lm -o PROGRAM.exe PROGRAM.cpp
我编写的其他不使用Sleep
的代码以这种方式编译好。
我需要向链接器(使用-l
)提供哪些库才能识别Sleep
函数?
答案 0 :(得分:10)
C ++ 11为标准库带来了并发和休眠功能。 Sleep
和usleep
不可移植。请改用标准库中的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)
。
其他持续时间也有相应的标准文字,例如: ms
,us
和ns
。
不需要使用上面的内容向链接器提供库。
答案 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()
。