【问题标题】:Undefined reference to fork() in Code::Blocks editor in Windows OSWindows OS 中 Code::Blocks 编辑器中对 fork() 的未定义引用
【发布时间】:2012-02-07 19:59:00
【问题描述】:

当我在 Windows 操作系统的 Code::Blocks 中运行以下代码时。 我曾经收到一个名为 undefined reference to fork() 的错误。 我确实设置/选择了 GCC 编译器作为我的默认编译器。

#include<stdio.h>       
#include<unistd.h>          
void main()          
{       
 int x;       
 x = 0;       
 fork();       
 x = 1;        
 ...     
 ....    
}

请帮帮我,告诉我,我可以在 windows 环境中的 Code::Blocks 中正确的 unix/linux 程序吗?

我又写了一个程序,

main()
{
  int x = 0;
  if(x == 0)
  {
    printf("X = %d", x);
    sleep(1000);//used delay also
    x = 1;
    printf("Now X = %d", x);;
  }
}

这里它给出了对 sleep() 和 /* 延迟的未定义引用 * /.
请帮帮我。

【问题讨论】:

  • @Vlad:Windows 并非“被设计破坏”;它只是不在乎 *nix 是如何做事的。它有自己的问题要解决,并以自己的方式解决它们,尽管这不是 *nix 专家可能喜欢的方式 - 运作良好,足以为绝大多数计算世界提供数十年的动力。好吧,事实上,它在 15 年多的时间里开箱即用的一堆东西已经被重新发明或固定在 Linux 和 *BSD 上。 (让我们看看...注册表?真正的 ACL?本机线程?二进制兼容性?哦,等等,*nix 仍然没有那个...)

标签: c windows gcc compiler-construction codeblocks


【解决方案1】:

不,无论你使用什么 IDE,你都不能像那样在 Windows 上编写 Unix 代码。但是,您应该尝试cygwin,它应该提供您需要的兼容层。

2017 年更新:这些天我们也有Windows Subsystem for Linux

【讨论】:

  • 我们可以做 UNIX/LINUX 编程 Cygwin 吗?它会提供完整的 Linux 编程风格吗?
  • 快完成了。您仍在 Windows 上运行。但这应该足够了。有一个cygwin FAQ 可以回答一些常见问题。
  • @cha0site:Cygwin 是否也实现了clone ()?还是“epoll”API?顺便说一句,我很久以前在某个地方看到了一个项目,它能够将 Linux 内核作为 Windows 内核的一部分运行。那很酷,几乎充满了味道。但不确定它现在的位置。
  • 没有clone(),也没有epoll。但你并不总是需要这些。我相信Windows内核中的Linux内核是coLinux。 Dan Aloni 确实是最 1337 h4x0r。另请查看 UMLWin32 了解他的另一个疯狂项目。
  • @VladLazarenko:查看andLinux 以获得可运行的 coLinux 发行版。
【解决方案2】:

Windows 上没有fork 系统调用。

【讨论】:

  • 在某些库中可能有,比如 Cygwin。
  • @larsmans: windows 有没有其他系统调用可以替代 fork() 和 sleep()?
  • CreateProcess,但是win32api和POSIX API完全不同。
  • @RasmiRanjanNayak:Windows(至少是 NT/2000)相当于 fork ()。该函数称为NtCreateProcessZwCreateProcess。但是,这是本机 API 而不是 Win32 API。你可以参考“Windows Nt/2000 Native Api Reference”了解更多细节,它甚至有一个使用它的例子。此外,还有一个 Win32 CreateProcess 可以派上用场,但不适用于您的情况。也看到这个 - stackoverflow.com/questions/985281/…
【解决方案3】:

fork() 是一个 unix 系统调用,所以当你在 windows 操作系统中执行此操作时,它肯定会产生一个未定义的引用。 Windows 不支持fork()

【讨论】:

    【解决方案4】:

    您尝试使用cygwin 我也不确定,但是在 ms-dos 环境中有一个等效的称为系统调用spawn()。您可以尝试使用它。

    【讨论】:

      【解决方案5】:

      windows没有fork()系统调用,可以试试cygwin或者pthreads。

      【讨论】:

        【解决方案6】:

        我也遇到了一些困难,请从https://www.cygwin.com/ 安装 Cygwin 确保从包窗口检查 gcc-core 和 gcc-debug 信息包。

        从 Internet 安装软件包,然后将默认编译器从代码块更改为 Cygwin GCC,如下所示

        确认Compiler安装目录是否放置好,如果没有,点击Autodetect按钮,如下图:

        【讨论】:

          猜你喜欢
          • 2016-08-12
          • 1970-01-01
          • 1970-01-01
          • 2018-06-12
          • 2020-08-17
          • 2019-02-26
          • 1970-01-01
          • 1970-01-01
          • 2017-01-24
          相关资源
          最近更新 更多