Error de vinculador MinGW: winsock

Estoy usando el comstackdor MinGW en Windows para comstackr mi aplicación C ++ con sockets. Mi comando para vincular se ve así:

g++.exe -Wall -Wno-long-long -pedantic -lwsock32 -o dist/Windows/piskvorky { there are a lot of object files } 

y también he intentado

 g++.exe -Wall -Wno-long-long -pedantic -lws2_32 -o dist/Windows/piskvorky { there are a lot of object files } 

pero en ambos casos obtengo este error:

 build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x33): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0xd0): undefined reference to `send@16' build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x1ee): undefined reference to `recv@16' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x184): undefined reference to `WSAStartup@8' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1a5): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1cb): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1d3): undefined reference to `WSACleanup@0' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x6fe): undefined reference to `bind@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x724): undefined reference to `listen@8' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x7f0): undefined reference to `gethostbyaddr@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x83c): undefined reference to `socket@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x86f): undefined reference to `htons@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x8b5): undefined reference to `connect@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x9c6): undefined reference to `accept@12' 

¿Tiene alguna idea de dónde puede estar el problema, por favor?

Coloque -lws2_32 DESPUÉS de la lista de archivos de objetos – GCC busca bibliotecas y archivos de objetos en el orden en que aparecen en la línea de comandos.

Solo para ayudar a los demás espectadores:

 gcc hello.c -o hello.o -lws2_32 

con mingw en eclipse: Menú – Projekt – Propiedades – c / c ++ Build – Configuración: Registrar “Configuración de herramienta” – MinGW C Linker – Varios: Parte inferior “otros objetos” agregar: “D: \ Programmierung \ mingw \ lib \ libwsock32.a “por ejemplo. No hay otras entradas para libwsock32.a en cualquier otra propiedad requerida, especialmente no en entradas de biblioteca. Tampoco hay banderas relacionadas con este Lib.

En:

Menú – Proyecto – Propiedades – Configuración de c / c ++ – Configuración: Registrar “Configuración de la herramienta” – Enlazador de MinGW C ++ – Varios: Parte inferior “otros objetos”

Agregue: libwsock32.a desde la carpeta bin de MinGW .

Saludos, acabo de analizar el problema anterior …

Aquí hay algunas observaciones primero …

Sé que te estás refiriendo a MinGw, pero puede que necesites a cygwin para evitar esto, no sé muy bien, conozco mejor a cygwin. Pero sé que son primos el uno del otro.

Cygwin viene con las bibliotecas de refuerzo precomstackdas, pero quién sabe de qué versión se trata. Estoy seguro de que es posible verificarlo, pero ¿quién tiene tiempo para hacerlo bien? No enlazo con bibliotecas de Cygwin boost, ni con las bibliotecas de mingw boost. Creé un boost desde cero utilizando gcc en Windows (cygwin). La comstackción estuvo bien.

En el momento de escribir esto, el impulso está en la versión 1.47.0. Creo.

Ya el hecho de que cygwin usa la versión (x?) Y el impulso es 1.47.0 podría ser un problema importante. Hacer que sepas lo que estás usando en el camino de impulso.

Estaba usando el código desarrollado en boost 1.42, y tenía errores de enlazador relacionados. Se compiló el código, se encontraron los encabezados, etc..etc … pero luego obtuve la referencia indefinida de WSA, etc. … etc … opensocket this, close socket that, etc ….

Por lo tanto, al parecer, impulsar, con el fin de hacer sockets de red, requiere una biblioteca de plataforma, en la que se encuentra en la forma de ws2_32 para windows, y socket para Linux con seguridad.

Por lo tanto, si está utilizando correctamente el boost e incluye las bibliotecas del sistema boost correcto, es posible que también necesite una biblioteca específica del sistema operativo para acceder a algunos recursos (redes en este caso).

Los errores del enlazador desaparecen después de eso. Probablemente sea obvio impulsar a los veteranos sobre lo que sucede aquí, pero no pude encontrar una respuesta clara a través de google.