我只是尝试使用 MinGW 在 MSYS 中构建 netcat,并意识到 MinGW 从未真正将所有 BSD 套接字内容移植到 Windows(例如 sys/socket.h)。我知道你可以在 MinGW 中使用 Windows 套接字,但为什么他们从来没有为 BSD 套接字创建 Windows 端口?我注意到很多程序使用#ifdef 来解决这个问题。是否有可以替代使用的 BSD 套接字的 Windows 端口?
以下是在 MSYS 中为 netcat 进行 make 时的错误:
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
MinGW 没有#ifdef。有没有我可以添加到 MSYS 的库/包以使所有内容都可以无错误地编译?
最佳答案
BSD sys/socket.h是 POSIX header ,win32 API 不支持它。 MinGW header 只是 native win32 header 的重新实现,不提供额外的 POSIX 兼容性。
如果您正在寻找 sys/socket.h 支持,请尝试使用 GNU gnulib 的 sys/socket.h replacement或使用 Cygwin ,它在 Windows 上提供了一个 POSIX 兼容性包装器。
关于c++ - MinGW 中的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517762/