usa tipo qué italia francia españa enchufes enchufe alemania c++ mingw sockets msys

c++ - tipo - enchufes en italia



Enchufes en MinGW (7)

¿Existe una biblioteca / paquete que pueda agregar a MSYS para hacer que todo se compile sin errores?

MSYS es una bifurcación de Cygwin. Proporciona una API de sockets BSD al igual que Cygwin. Si tiene MSYS, debería poder compilar su código así:

gcc -c -o test.o test.c -I/include

El -I/include es necesario para obligar al compilador a buscar en el directorio MSYS include.

Y enlace así:

gcc -o test.exe test.o /bin/msys-1.0.dll

Solo intentaba construir netcat en MSYS utilizando MinGW y me di cuenta de que MinGW nunca transportaba realmente todas las conexiones de BSD a Windows (por ejemplo, sys / socket.h). Sé que puede usar Windows Sockets en MinGW, pero ¿por qué nunca crearon un puerto de Windows para los sockets BSD? Noté bastantes programas usando # ifdef''s para solucionar el problema. ¿Hay un puerto de Windows de los enchufes BSD en alguna parte que pueda usarse en su lugar?

Aquí están los errores al hacer una marca para netcat en MSYS:

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

No hay # ifdef para MinGW. ¿Existe una biblioteca / paquete que pueda agregar a MSYS para hacer que todo se compile sin errores?

Nota: Puede descargar netcat here y buscar el repositorio de CVS here


Como dijo ChrisW, Winsock2 es un puerto de conectores BSD. ¿Qué parte de winsock estás tratando de usar que difiere de los conectores BSD? (aparte de WSAStartup y WSACleanup)


Estos comentarios de otra respuesta sirvieron como la respuesta que necesitaba para obtener un fragmento de código bsd sencillo para compilar con mingw en Windows.

Reemplace todos los que incluyen con #include ya que ese sería el encabezado equivalente para winsock, luego vea qué sucede.

También necesitarás un enlace contra ws2_32 y usar WSAStartup / WSACleanup. Lo cual podría ponerlo en funcionamiento.

EDITAR: También terminé teniendo que reemplazar close con shutdown / closesocket y write con send . El código compilado bien, pero en realidad no funcionó sin esos cambios adicionales.


MingWin es minimalista, y ese es el aspecto más importante. Debido a que hace que sea más fácil de entender, al final es responsabilidad del desarrollador escribir la aplicación. MingWin solo hace las cosas más fáciles pero no tiene magia en turing nix apps para Windows.



WinSock y WinSock2 tienen diferentes nombres de funciones de los BSD Sockets. Si deseo escribir aplicaciones multiplataforma, entonces tengo muchos códigos para mantener a Microsoft feliz.

Sería mucho más fácil si hubiera archivos especiales "socket.h" y "socket.c" incluidos con MinGW que simplemente traducen cosas llamando a las contrapartes respectivas de WinSock2.

Estoy empezando a aprender programación en C, así que no puedo hacerlo yo solo, pero me sorprende que nadie haya intentado esto hasta ahora.


BSD sys / socket.h es un encabezado POSIX y la API win32 no lo admite. Los encabezados MinGW son solo una reimplementación de los encabezados win32 nativos y no ofrecen compatibilidad POSIX adicional.

Si está buscando la compatibilidad con sys / socket.h, intente reemplazar GNU gnulib sys / socket.h o vaya con Cygwin , que proporciona un contenedor de compatibilidad POSIX en Windows.