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

Visual C++ Discussion :

Erreur lors de la compilation - LNK2019 : symbole externe non résolu


Sujet :

Visual C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Yamakasinge
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Yamakasinge
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Erreur lors de la compilation - LNK2019 : symbole externe non résolu
    Bonjour,
    J'essaie de compiler mon programme sous Visual Studio 2017 (Community Edition) mais lorsque j'essaye de le compiler une erreur de build étrange apparait :
    LNK2019 : symbole externe non résolu.
    Voici mon code :

    main.cpp
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include "stdio.h"
    #include "winsock2.h"
    #include "conio.h"
    #include "stdint.h"
    #include "main.h"
     
    int main(int argc, char *argv[]) {
    	WORD versionProtocoleSocket;
    	int err;
     
     
    	printf("Initialisation du protocole de socket 2.2...");
    	versionProtocoleSocket = MAKEWORD(2, 2);
    	err = initialiserSocket(versionProtocoleSocket);
    	if (err != 0) {
    		errSocket(err);
    		printf("Le programme va s'arreter");
    		_getch();
    		return EXIT_FAILURE;
    	}
    	else
    		printf("Initialisation reussi");
     
    	_getch();
    	return EXIT_SUCCESS;
    }
     
    int initialiserSocket(WORD version) {
    	WSADATA wsaData;
    	int err = WSAStartup(version, &wsaData);
    	return err;
    }
     
    void errSocket(int err) {
    	switch (err) {
    	case WSASYSNOTREADY:
    		printf("Le systeme reseau n'est pas pret pour la communication");
    		break;
    	case WSAVERNOTSUPPORTED:
    		printf("La version du protocole Windows Socket demande n'est pas supporte");
    		break;
    	case WSAEINPROGRESS:
    		printf("Une operation Windows Socket est en cours");
    		break;
    	case WSAEPROCLIM:
    		printf("Le nombre de tache maximum pour le protocole Windows Socket a ete atteint");
    		break;
    	case WSAEFAULT:
    		printf("Le pointeur lpWSAData n'est pas valide");
    		break;
    	default:
    		printf("Une erreur inconnue a ete rencontre");
    		break;
    	}
    }
    main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #pragma once
     
    int initialiserSocket(WORD version);
    void errSocket(int err);
    Merci d'avance pour votre aide,
    Léo

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 199
    Points : 12 352
    Points
    12 352
    Par défaut
    mais lorsque j'essaye de le compiler une erreur de build étrange apparait :
    LNK2019 : symbole externe non résolu.
    Ça doit être l'erreur la plus communément prise dans la gueule de tout développeur utilisant MSVC, et de très loin, donc pas du tout "étrange".
    C'est juste que votre code utilise, directement ou indirectement, un symbole (fonction ou variable globales) qui a été déclaré dans un fichier d'en-tête, mais dont la définition n'est dans aucun des .lib ou .obj donnés à l'éditeur de lien.
    Le message d'erreur indique de quel symbole il s'agit et dans quel module compilé il est utilisé. Cela indiquera donc, indirectement, le cpp ou la lib manquante.
    En gros, il te manque un .cpp ou un .lib.

    Ton code pique pas mal les yeux.
    C'est du code C, et pas du code C++, attention, MSVC est un compilateur C++, suivant la norme C++, pas un compilateur C, il n'est même pas compatible C99 je crois.
    Attention à l'utilisation correct des #include, l'utilisation des quotes "" n'est pas équivalente aux <>.
    Utilisation d'une API réseau non portable, de bas niveau, antédiluvienne, quand il existe des bibliothèques réseau de haut niveau, en C++, portable, c'est vraiment ce faire du mal pour rien.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 586
    Points : 7 724
    Points
    7 724
    Par défaut
    Il aurait fallu le nom du symbole non résolu.
    La bibliothèque qui manque est vraisemblablement ws2_32.lib qui doit fournir les objets winsock2.

  4. #4
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    j 'ai la même erreur, mais pour ma part c'est simplement avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox(NULL, L"TEST", L"TEST", MB_OKCANCEL);
    ce code affiche une simple messagebox et est lié à Windows.h. j'ai donc bien un :
    Je n'ai pas codé sous visual studio depuis des lustres.
    Que dois je paramétrer pour ne plus obtenir cette erreur?
    Je précise que je génère une dll et non un programme autonome.
    PS Je poste ici pour éviter de faire un doublon

  5. #5
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut pb de lnk avec visual studio c++
    petit up svp,
    je ne vois pas ce qu'il faut paramétrer dans visual studio c++ pour ne plus avoir ces erreurs de LNK
    Je pense que c'est dans les propriétés du projet de création de ma dll mais je ne sais pas où....
    Quelqu'un pour me renseigner?
    merci par avance

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 199
    Points : 12 352
    Points
    12 352
    Par défaut
    Mon laïus est aussi valable pour vous, ce n'était pas spécifique à @Yamakasinge.
    "Windows.h", c'est un fichier d'en-tête et donc en rien un .obj ou .lib où doit être le code que l'éditeur de lien ne trouve pas.

    Si c'est "MessageBox" qui est manquant, GG, RTFM :
    https://msdn.microsoft.com/en-us/lib...or=-2147217396
    =>
    Library
    User32.lib

    Vous avez donc probablement touché à plein de bouton sans comprendre et donc enlevé "User32.lib" de la liste de .lib à donner à l'éditeur de lien.

  7. #7
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Non en réalité je cherche à modifier un projet créé par une autre personne
    Mais comme vous le dites je pense que ce projet a subi des modifications dans Visual
    En fait je sais bien qu il manque un lien vers Windows.h mais je ne connais pas Visual étant habitué à QtCreator
    Je voulais simplement savoir où paramétrer les liens dans Visual mais c est réglé je suis reparti de zéro c était plus simple
    Merci tout de même

Discussions similaires

  1. Erreur LNK2019 : symbole externe non résolu
    Par bariol dans le forum Visual C++
    Réponses: 7
    Dernier message: 20/06/2016, 18h58
  2. Réponses: 2
    Dernier message: 12/03/2013, 12h11
  3. error LNK2019: symbole externe non résolu
    Par bugmenot dans le forum Visual C++
    Réponses: 6
    Dernier message: 24/11/2009, 02h02
  4. LNK2019: symbole externe non résolu __ftol2_sse
    Par ellipse dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2006, 00h48
  5. LNK2019 symbole externe non résolu
    Par devmat dans le forum MFC
    Réponses: 3
    Dernier message: 04/01/2006, 01h14

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