使用glibc在Windows中对sleep()的未定义引用

时间:2012-08-03 01:49:33

标签: c windows sleep

我制作了一段简单的代码来记录用户输入的内容:

#include <stdio.h>
#include <unistd.h>

int main() {
  char letter;
  printf("Enter in a character:");
  scanf("%c", &letter);
  sleep(2);
  printf("Letter was: %c", letter);
  return 0;
}

在此代码中,它应该在第8行睡眠2秒。

不幸的是,即使我有正确的library

,睡眠也是一个未定义的引用

有没有办法在 Windows Vista 中修复此问题?

4 个答案:

答案 0 :(得分:5)

sleep()是POSIX函数,但您使用的是MinGW,它不提供POSIX支持。引用http://lists-archives.com/mingw-users/01723-including-library-for-unistd-h-header.html

  

请记住,mingw不再提供任何Unix API   Microsoft C运行时提供。 (嗯,实际上确实如此,但只是一点点   更多,没有“困难”的东西。)Microsoft C运行时提供Unixish   函数如open(),read(),close(),但不是函数   getuid(),getegid(),getppid()。

也不睡觉()。如果你想要一个POSIX环境,你需要在Windows上使用Cygwin或其他一些POSIX支持;见http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows

如果你只需要MinGW给你+ sleep(),你可以使用Windows Sleep()函数(注意它是大写的),它接受一个参数(以毫秒为单位)并要求你包含Windows.h(而不是unistd.h中);见sleep function in Windows, using C

答案 1 :(得分:1)

如果它是未定义的引用,则表示链接器未将包含 sleep 的库链接到您的代码。

您可能已经包含 unistd.h (它为您提供了适当的函数原型),但您还必须链接到包含 sleep 实现的库。

显示您如何编译和链接该程序。

答案 2 :(得分:1)

如果一个程序必须睡2秒钟,你进入2000睡眠功能..

Sleep(unsigned int): - unsigned int是毫秒数(1秒= 1000毫秒)

请在睡眠中给出“s”作为首字母(5000);

并包含头文件Windows.h

答案 3 :(得分:0)

在代码启动时包含以下函数,只要您希望执行暂停而不给CPU带来额外负担(如果是for循环)

void sleep(unsigned int mseconds)
{
    clock_t goal = mseconds + clock();
    while (goal > clock());
}