IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

MinGW et linking de winsock2


Sujet :

Réseau C

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut MinGW et linking de winsock2
    Bonjour j'ai un probleme de liens quand je fait l'operation suivante avec le compilateur MinGW:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    gcc   -Iinclude   -D_DEBUG -O0 -g3 -Wall -c -fmessage-length=0   -c src/s400server.c -o Debug/s400server.o
    gcc   -Iinclude   -D_DEBUG -O0 -g3 -Wall -c -fmessage-length=0   -c src/UDP_Packet.c -o Debug/UDP_Packet.o
    gcc   -Iinclude   -D_DEBUG -O0 -g3 -Wall -c -fmessage-length=0   -c src/UDP_Socket.c -o Debug/UDP_Socket.o
    g++  -lwsock32 -Wl,--subsystem,windows -mwindows  -mno-cygwin -o S4NPSimu.exe Debug/s400server.o 
    Debug/UDP_Socket.o: In function `initSocket':
    D:/projects/S4NPSimu/src/UDP_Socket.c:17: undefined reference to `WSAStartup@8'
    Debug/UDP_Socket.o: In function `endSocket':
    D:/projects/S4NPSimu/src/UDP_Socket.c:33: undefined reference to `WSACleanup@0'
    Debug/UDP_Socket.o: In function `CreateUDPSocket':
    D:/projects/S4NPSimu/src/UDP_Socket.c:53: undefined reference to `socket@12'
    Debug/UDP_Socket.o: In function `CreateUDPSocketServer':
    D:/projects/S4NPSimu/src/UDP_Socket.c:69: undefined reference to `bind@12'
    Debug/UDP_Socket.o: In function `ReleaseUDPSocket':
    ....
    Dans le fichier UDP_Socket.h j'inclut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <windows.h>
    #include <winsock2.h>
    Donc je devrais bien linker avec C:\MinGW\lib\libwsock32.a, mais bizarement ca ne marche pas ...??

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut
    Bon en fait je viens de trouver la reponse sur le forum: http://www.gamedev.net/community/for...opic_id=323433

    Il faut linker avec le répertoire ou se trouve les librairies (tres bizarre car normalement il n'y a pas de problème avec les librairies standard de windows)

    Donc voila a quoi ressemble la ligne pour linker:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++  -L"C:\MinGW\lib"  -o Debug/S4NPSimu.exe Debug/s400server.o Debug/UDP_Packet.o Debug/UDP_Socket.o  -lwsock32 -Wl,--subsystem,windows -mwindows

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par elraton Voir le message
    Il faut linker avec le répertoire ou se trouve les librairies (tres bizarre car normalement il n'y a pas de problème avec les librairies standard de windows)

    Donc voila a quoi ressemble la ligne pour linker:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++  -L"C:\MinGW\lib"  -o Debug/S4NPSimu.exe Debug/s400server.o Debug/UDP_Packet.o Debug/UDP_Socket.o  -lwsock32 -Wl,--subsystem,windows -mwindows
    Pourquoi g++ ? Si tu fais du C, c'est gcc (ou cc1 etc.)

    Ensuite, -L"C:\MinGW\lib" ne signifie pas "linker avec le répertoire ou se trouve les librairies", mais "voici un répertoire dans lequel l'éditeur de lien doit chercher les bibliothèques à lier"

    La bibliothèque en question est indiquée par -lwsock32 qui signifie "lier la bibliothèque wsock32 dont le fichier est libwsock32.a"

    J'ai d'ailleurs un doute sur le nom de cette bibliothèque. Chez moi (MinGW), c'est ws2_32, soit le fichier libws2_32.a

  4. #4
    Invité de passage
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 1
    Par défaut
    Merci mille fois "elraton" ! et dire que j'y ai passé l'après-midi et toute la soirée. Je ne sais comment MinGW ce débrouille pour choisir les bibliothèques en fonction des headers mais "winsock2.h" ne doit pas être le seul header orphelin et indiquer explicitement les bibliothèques utilisées résout bien le problème, alors encore merci pour cette note.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SDL 2.0] Compilation avec gcc (mingw) , erreur de link?
    Par Devprek dans le forum SDL
    Réponses: 3
    Dernier message: 10/02/2015, 10h02
  2. mingw et link
    Par jfouche dans le forum Boost
    Réponses: 6
    Dernier message: 16/05/2009, 14h32
  3. mingw : link avec dll sans .a !
    Par yan dans le forum MinGW
    Réponses: 6
    Dernier message: 09/02/2009, 09h51
  4. Problème de link avec winsock2.h
    Par sebh dans le forum Windows
    Réponses: 5
    Dernier message: 25/04/2008, 11h01
  5. erreur de link sous wxWidgets avec Mingw
    Par pyoda dans le forum wxWidgets
    Réponses: 4
    Dernier message: 28/04/2006, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo