我正在使用Mingw64将程序从Linux移植到Windows。它确实可以很好地编译,但是现在我试图使测试运行,并且出现了类似implicit declaration of function 'pipe'" (and 'fcntl'), -fPIC ignored for target
之类的警告……还有更多有问题的诸如F_GETFD undeclared
(和F_SETFD
之类的错误, O_NONBLOCK
。
我现在所做的事情:
我发现所有这些文件都应该包含在{c.c文件中正确包含的fcntl.h
和unistd.h
中。我还可以在Mingw64中找到它们(尽管有多个unistd.h
文件...),这就是为什么我在“ include”部分没有出现任何错误的原因。但是,这些文件均未定义管道函数,fcntl函数或任何F_GETFD等。
由于两个标头都包含io.h
,因此我也关注了io.h
。它确实具有_pipe函数,但是具有3个args,而我的.c文件中使用的函数只有2个,因此可能不一样。
我已经在网上搜索了,但是大多数有相同问题的人根本没有标题。我还找到了一些答案,说要使用“等效” Windows函数来重新编写代码,但是起初我没有写C文件。我也许能理解它的作用,也许一段时间后我会重新编写它,但是由于我有提供标题的Mingw环境,因此我认为我应该能够使用那些pipe()
和{{ 1}}函数。它将比重新编写此代码更快。
我所拥有的:
我不允许显示代码,而且我认为这无济于事,因为唯一的问题是存在一些pipe(),fcntl()函数以及F_GETFD,F_SETFD,O_NONCLOCK ,用它写,在头文件中找不到。
标题是Mingw64的标题,可以在这里找到:
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/unistd.h
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/fcntl.h
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/io.h
我想拥有的东西
由于我仍然有使用这些文件的Linux环境,因此我在这里查看了fcntl.h和unistd.h文件;他们绝对不一样。特别是,函数fcntl()和pipe()在其中正确定义。 fcntl.h包含另一个fcntl-linux.h,它定义了F_GETFD和其他。
如何在Mingw64环境中使用它?