我只是想在MSYS MinGW的使用打造的netcat,并意识到,MinGW的从来没有真正移植所有的BSD套接字的东西到Windows(如SYS / socket.h中)。 我知道你可以使用MinGW的Windows套接字,但为什么他们从来没有让BSD套接字的一个Windows端口? 我注意到使用的#ifdef要解决的问题相当多的程序。 有没有可以代替BSD套接字某处的一个Windows端口?
这里是做一个化妆在MSYS的netcat当错误:
gcc -DLOCALEDIR=\"\/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -Wall -c `test -f 'core.c' || echo './'`core.c
In file included from core.c:29:
netcat.h:38:24: sys/socket.h: No such file or directory
netcat.h:39:63: sys/uio.h: No such file or directory
netcat.h:41:24: netinet/in.h: No such file or directory
netcat.h:42:55: arpa/inet.h: No such file or directory
有没有的#ifdef的MinGW的。 是否有图书馆/包,我可以添加到MSYS让一切通过编译?
注意:您可以下载的netcat 这里 ,浏览CVS回购这里
BSD SYS / socket.h中是一个POSIX头和Win32 API的不支持它。 MinGW的头部只是一个本机Win32头重新实现,并且不提供额外的POSIX兼容。
如果您正在寻找SYS / socket.h中的支持,无论是尝试GNU gnulib的SYS / socket.h中更换或去Cygwin的 ,它提供了Windows上的POSIX兼容的包装。
Winsock和WinSock2中有来自BSD套接字不同的函数名。 如果我想编写跨平台的应用程序,那么我有一些代码有很多变通的只是为了让微软高兴。
这将是容易得多,如果有特殊的“socket.h中”,其中包括与MinGW的,简单地通过调用相应的WinSock2反翻译件东西“socket.c中”文件。
我刚开始学习C语言编程,所以我无法做这自己,但我很惊讶,似乎没有人甚至尝试这个至今。
从另一个回答这些意见担任我需要得到一块简单的BSD套接字代码在Windows上的MinGW编译答案。
更换所有那些与#包括包括因为这将是对winsock的等价标题,然后看看会发生什么。
您还需要反对WS2_32链接,并使用调用WSAStartup / WSACleanup。 这可能让你和运行。
编辑:我也结束了不必更换close
与shutdown
/ closesocket
,并write
有send
。 该代码编译的罚款,但没有没有这些额外的变化实际工作。
MingWin是极简主义,那就是它的最重要的方面。 因为它可以更容易了解,在到底是开发商的责任,以编写应用程序。 MingWin只会使事情变得更容易,但确实在图灵nix中的应用程序到Windows没有什么神奇。
见计算器链接: 究竟应该怎样得到“SYS / socket.h中”页眉/源文件?
答案/解决方案更加明确。
正如ChrisW说,Winsock2的是BSD套接字的端口。 其中的Winsock的部分是你想使用的从BSD套接字不同? (除WSAStartup和WSACleanup)
是否有图书馆/包,我可以添加到MSYS让一切通过编译?
MSYS是Cygwin的的叉子。 它提供了一个BSD套接字API就像Cygwin的。 如果你有MSYS,你应该能够编写这样的代码:
gcc -c -o test.o test.c -I/include
该-I/include
需要强制编译器在MSYS看include目录。
和链接如下:
gcc -o test.exe test.o /bin/msys-1.0.dll