MinGW linker error: winsock
Je suis en utilisant compilateur MinGW sous Windows pour compiler mon application C++ avec des sockets. Ma commande pour relier ressemble:
g++.exe -Wall -Wno-long-long -pedantic -lwsock32 -o dist/Windows/piskvorky { there are a lot of object files }
et j'ai aussi essayé de
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 une idée d'où le problème peut être, s'il vous plaît?
- piškvorky se socketama? 😀
- Ouais, le jeu dispose d'un mode réseau
Vous devez vous connecter pour publier un commentaire.
Mettre le
-lws2_32
APRÈS la liste des fichiers objets - GCC recherche et bibliothèques d'objets les fichiers dans l'ordre où ils apparaissent sur la ligne de commande.Juste pour aider les autres téléspectateurs là:
avec mingw sur eclipse:
Menu - Projekt - Propriétés - c/c++Build - Paramètres: Enregistrez l'Outil "Paramètres" - MinGW C de l'éditeur de liens - Divers: Partie Inférieure "autres objets" ajouter: "D:\Programmierung\mingw\lib\libwsock32.a" pour exemple. Pas d'autres entrées pour libwsock32.un sur toutes les autres propriétés requises, surtout pas dans la Bibliothèque d'entrées. Aussi pas de drapeaux concernant cette Lib.
Dans:
Menu - Projet - Propriétés - c/c++Build - Paramètres: Enregistrez l'Outil "Paramètres" - MinGW C++ Linker - Divers: Partie Inférieure "autres objets"
Ajouter: libwsock32.un de dossier bin de MinGW.
Salutations, je suis juste allé à travers le problème ci-dessus....
Voici donc quelques observations tout d'abord....
Je sais que l'on se réfère à MinGw, mais vous pouvez avoir besoin de cygwin pour contourner ce problème, je ne sais pas mingw que bon, je sais que cygwin mieux. Mais je sais qu'ils sont cousins les uns des autres.
Cygwin est livré avec le précompilés bibliothèques boost, mais qui sait de quelle version ils sont. Je suis sûr que c'est possible de le vérifier, mais qui a le temps de faire ce que le droit? Je n'ai pas de lien à l'encontre de cygwin bibliothèques boost, ou le mingw bibliothèques boost, j'ai construit boost à partir de zéro à l'aide de gcc sous windows (cygwin). La compilation s'en est très bien.
Au moment de la rédaction de ce boost est sur la version 1.47.0 je crois.
Déjà le fait que cygwin utilise la version (x?) et boost est 1.47.0 pourrait être un problème majeur. Vous faire savoir ce que vous utilisez dans la façon de boost.
J'ai été en utilisant le code développé sur un coup de pouce 1.42, et s'erreurs d'édition de liens. Le code compilé, les en-têtes ont été trouvés, etc..etc... mais j'ai eu de la référence non définie à l'ASM, etc...etc...opensocket ce, à proximité de sockets, etc....
Donc, apparemment, boost, pour faire des sockets réseau, nécessite une plate-forme de bibliothèque, dans laquelle a été trouvé dans la forme de ws2_32 pour windows, et prise pour linux, pour sûr.
Donc, si vous êtes correctement à l'aide de coup de pouce, et y compris le bon système de suralimentation bibliothèques, vous pouvez aussi avoir besoin d'un système d'exploitation spécifique de la bibliothèque pour accéder à certaines ressources (mise en réseau, dans ce cas).
Erreurs d'édition de liens pour disparaître par la suite. C'est probablement évident pour stimuler les vétérans de ce qui se passe ici, mais j'ai été incapable de trouver une réponse claire par l'intermédiaire de google.