Erreur de l’éditeur de liens MinGW: winsock

J’utilise le compilateur MinGW sous Windows pour comstackr mon application C ++ avec des sockets. Ma commande de liaison ressemble à ceci:

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

et j’ai aussi essayé

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

mais dans les deux cas, j’obtiens cette erreur:

 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' 

Avez-vous des idées là où le problème peut être, s’il vous plaît?

Mettez le -lws2_32 APRÈS la liste des fichiers objects – GCC effectue une recherche dans les bibliothèques et les fichiers objects dans l’ordre dans -lws2_32 ils apparaissent sur la ligne de commande.

Juste pour aider les autres téléspectateurs:

 gcc hello.c -o hello.o -lws2_32 

avec mingw sur eclipse: Menu – Projekt – Propriétés – c / c ++ Build – Paramètres: Enregistrer “Paramètres de l’outil” – MinGW C Linker – Divers: Partie inférieure “autres objects” append: “D: \ Programmierung \ mingw \ lib \ libwsock32.a “par exemple. Aucune autre entrée pour libwsock32.a sur les autres propriétés requirejses, surtout pas dans les entrées de la bibliothèque. Pas de drapeaux relatifs à cette Lib.

Dans:

Menu – Projet – Propriétés – c / c ++ Build – Paramètres: Enregistrer “Paramètres de l’outil” – MinGW C ++ Linker – Divers: Partie inférieure “Autres objects”

Ajoutez: libwsock32.a à partir du dossier bin de MinGW .

Salutations Je viens de traverser le problème ci-dessus ….

Donc, voici quelques observations tout d’abord ….

Je sais que vous faites référence à MinGw, mais vous aurez peut-être besoin de cygwin pour contourner ce problème, je ne sais pas si bien, je sais mieux cygwin. Mais je sais qu’ils sont cousins ​​l’un de l’autre.

Cygwin est livré avec les bibliothèques de précompilation boost, mais qui sait de quelle version elles sont. Je suis sûr qu’il est possible de vérifier, mais qui a le temps de le faire correctement? Je ne fais pas de lien avec les bibliothèques cygwin boost, ni avec les bibliothèques mingw boost, j’ai créé boost à partir de zéro en utilisant gcc sur windows (cygwin). La compilation s’est bien passée.

Au moment de l’écriture de ce boost, c’est sur la version 1.47.0 que je crois.

Déjà, le fait que cygwin utilise la version (x?) Et le boost est 1.47.0 pourrait être un problème majeur. Faites-vous savoir ce que vous utilisez dans le sens de boost.

J’utilisais du code développé sur boost 1,42 et des erreurs liées à l’éditeur de liens. Le code compilé, les en-têtes ont été trouvés, etc..etc … mais j’ai eu la référence non définie à WSA etc … etc … opensocket this, close socket that, etc ….

Donc, apparemment, pour faire des sockets réseau, il faut une bibliothèque de plate-forme, sous la forme ws2_32 pour Windows, et socket pour linux à coup sûr.

Donc, si vous utilisez correctement boost et que vous utilisez les bibliothèques correctes du système boost, vous aurez peut-être besoin d’une bibliothèque spécifique au système d’exploitation pour accéder à certaines ressources (la mise en réseau dans ce cas).

Les erreurs de l’éditeur de liens disparaissent après cela. Il est probablement évident de stimuler les vétérans, mais je n’ai pas pu trouver de réponse claire via Google.