Code::Blocks 编辑器在 Windows 操作系统中出现 "Undefined reference to fork()" 错误。

11

当我在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() 函数和 / * delay 函数* /。
请帮忙解决。


@Vlad:Windows并非“设计有缺陷”;它只是不关心*nix如何做事情。它有自己要解决的问题,并以自己的方式解决了这些问题,虽然这种方式可能不是*nix专家所喜欢的方式,但足以支撑计算机世界的绝大部分工作数十年。实际上,它已经在开箱即用的情况下完成了15年以上的许多工作,这些工作已经被Linux和*BSD重新发明或添加。(看看...注册表?真正的ACL?本地线程?二进制兼容性?哦,等等,*nix仍然没有那个...) - cHao
6个回答

10

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

2017更新:现在我们也有Windows Subsystem for Linux


我们能在Cygwin上进行UNIX/LINUX编程吗?它会提供完整的Linux编程体验吗? - Rasmi Ranjan Nayak
几乎完成了。你仍在使用Windows系统,但应该足够了。有一个cygwin FAQ可以回答一些常见问题。 - cha0site
@cha0site:Cygwin是否也实现了clone()函数?或者"epoll" API呢?顺便说一句,我曾经在某个地方看到过一个项目,可以将Linux内核作为Windows内核的一部分运行。那很酷,几乎是完整的体验。不过现在不确定它的进展如何。 - user405725
没有 clone(),也没有 epoll。但你并不总是需要它们。我相信在 Windows 内核中的 Linux 内核是 coLinux。Dan Aloni 确实是一个最 1337 的黑客。还可以查看他的另一个疯狂项目 UMLWin32 - cha0site
@VladLazarenko:并且请查看andLinux,以获取一个可用的coLinux发行版。 - cha0site

3

在Windows系统中没有fork系统调用。


1
有些库可能存在于像Cygwin这样的库中。 - user405725
@larsmans:Windows有没有其他可以替代fork()和sleep()的系统调用? - Rasmi Ranjan Nayak
1
CreateProcess,但win32api与POSIX API完全不同。 - cha0site
1
@RasmiRanjanNayak:Windows(至少NT/2000)有一个等效的fork()。该函数称为NtCreateProcessZwCreateProcess。但是,这是本地API而不是Win32 API。您可以参考“Windows Nt/2000 Native Api Reference”了解更多详细信息,它甚至有使用示例。此外,还有一个Win32 CreateProcess可能会很方便,但在您的情况下不适用。也可以参考这个链接-https://dev59.com/g3NA5IYBdhLWcg3wYMt- - user405725

2

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


0

你可以尝试使用cygwin。此外,我不确定在MS-DOS环境中是否有类似的系统调用spawn(),你可以尝试使用它。


0

在Windows中没有fork()系统调用,您可以尝试使用cygwin或pthreads。


0

我也遇到了一些困难,从https://www.cygwin.com/安装Cygwin。 确保你在软件包窗口中勾选了gcc-core和gcc-debug信息包。

enter image description here

从互联网安装软件包,然后按照下面的示例从代码块更改默认编译器为Cygwin GCC。

enter image description here

确认编译器安装目录是否正确,如果不正确,请单击如下所示的“自动检测”按钮:

enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接