J'utilise Code :: Blocks, MinGW et Windows. Im essayant d'initialiser le winsock afin que je puisse travailler sur un projet. Je reçois toujours l'erreur Undefined Reference to WSAStartup@8
Quelqu'un sait comment résoudre ce problème?
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc , char *argv[]){
WSADATA wsa;
int output;
output=WSAStartup(MAKEWORD(2,2),&wsa);
if(output != 0) {
printf("Startup failed %d\n", output);
return 1;
} else {
printf("Initialized");
return 0;
}
}
L'éditeur de liens recherche les dépendances après le chargement du code. Si la bibliothèque est apparue dans le processus de construction avant que les symboles ne soient nécessaires, car les fichiers source sont apparus après cela, aucun symbole n'a été utilisé et plus tard, lorsqu'ils apparaîtront dans les fichiers source, ils ne seront pas résolus. Placez la bibliothèque winsock -lws2_32
que vous liez avec APRÈS les fichiers source et objet.
gcc prog.c -o prog -lws2_32
J'ai fait un autre chemin, je trouve la bibliothèque qui contient des fonctions auxquelles le compilateur ne peut pas se lier, puis j'ajoute à l'éditeur de liens du compilateur. et presque des bibliothèques se trouvent dans le dossier lib de MINGW (souvent C:/MinGW/lib); comme ceci Ce sont des bibliothèques que j'ajoute quand j'ai eu quelques erreurs avec Dlib Ou vous pouvez faire cette instruction pour la lib manquante de regconite automatique. Construction d'un programme wxWidgets dans Code :: Blocks
Votre code source montre que vous utilisez l'instruction très spécifique, (au compilateur de Microsoft), #pragma comment(lib,"ws2_32.lib")
. Il y a deux problèmes avec ceci:
Pour résoudre votre problème, vous ne devez pas compter sur des pragmas spécifiques à MSVC, dans votre code source; vous devez plutôt spécifier la bibliothèque correctement sur la ligne de commande de liaison, (presque) comme le montre tinky_Winky:
gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...
(et assurez-vous que toutes les bibliothèques que vous spécifiez proviennent après les fichiers objet ou les fichiers source qui en ont besoin).
Vous devriez peut-être vérifier votre compiler options
, ajouter -lws2_32
à add linker options when linking
. J'utilise TDM-GCC, ça marche bien après ça.