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

C Discussion :

Erreur du linker incompréhensible (LNK2001)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut Erreur du linker incompréhensible (LNK2001)
    Bonjour

    Je n'arrive pas à compiler un programme sous VisualStudio et je ne sais pas pourquoi

    J'ai un générateur de nombre (en cpp) dans un dossier gene
    EDIT : Il est maintenant dans une dll avec une lib pour le linkage

    Le fichier MonGenerateur.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #pragma once
    void gg_initialiser(int seed);
    int gg_generer();
    Le fichier d'entrée lui bien en c dont voici les extraits interressant:
    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
     
    //divers en-tête
    #include "Gene\MonGenerateur.h"
     
    uint32_t generer(void){
    return gg_generer();
    }
     
    int main (int argc, char* argv[])
    {
    //...
    gg_initialiser(0);
     
    //...
    return 0;
    }
    Et lors de la compilation j'obtiens ces erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur 3 error LNK2001: symbole externe non résolu _gg_generer C:\Users\Raphael\Documents\Visual Studio 2010\Projects\Generateur\U01\U01.obj
    Erreur 2 error LNK2001: symbole externe non résolu _gg_initialiser C:\Users\Raphael\Documents\Visual Studio 2010\Projects\Generateur\U01\U01.obj
    et je ne sais pas pourquoi.


    J'ai aussi essayé de laisser le générateur dans une dll avec une lib pour le linkage et ca ne change rien.

    Pouvez-vous m'aider?

    raphchar

    PS :j'ai tout nettoyé avant de regénérer la solution

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Tes fonctions en gg_* où sont-elles définies? Peux-tu nous montrer le .c correspondant?

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Les fonction en gg sont en c++, mais à la base elles était dans la dll
    EDIT : à présent elles sont dans la dll

    Elles sont définies comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "generateur.h"
    #include "MonGenerateur.h"
     
     
    generateur legenerateur;
    void gg_initialiser(int seed)
    {
    legenerateur.initialiser(seed);
    }
    int gg_generer()
    {
    return legenerateur.generer();
    }
    mais elles ne posent pas de problème pour l'inclusion dans un programme cpp

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Tu ne peux pas inclure des bouts de code en C++ dans un code en C.

    A la compilation, ton compilateur risque d'appeler gcc pour les fichier C et g++ pour les fichiers C++, or lors de l'édition des liens, il va y avoir des soucis.

    Bien que le C++ reprenne tout le C ainsi, le C et le C++ sont deux langages distincts. On ne peut pas faire un programme moitié C et moitié C++.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Juste une petite precision :

    Citation Envoyé par Neckara Voir le message
    Bien que le C++ reprenne tout le C
    Ce n'est pas tout a fait vrai : le C++ n'est pas un sur-ensemble du C, c'est a dire que tout programme en C ne compilera pas forcement en C++.

    L'un des exemples les plus simples consiste en l'ajout de mots-clefs par le C++, comme new. Le code suivant est valide en ANSI C, pas en C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <stdlib.h> /* for exit status */
     
    int main (void)
    {
      int new = 2;
     
      printf ("new : %d\n", new);
     
      return EXIT_SUCCESS;
    }
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Disons que le C++ reprend le C ANSI (et non ainsi comme je l'ai écris dans mon post précédant -désolé pour la petite coquille-), mais il rajoute pas mal de choses ce qui fait que certains noms de variables peuvent être interprétés autrement par g++.


    Mais est-ce la seule source d'erreur lors de l'écriture d'un programme en copiant/collant des fonctions C ANSI dans un programme en C++ ou il en existe d'autre?

    J'essayerais de me souvenir de cela la prochaine fois^^

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

Discussions similaires

  1. Erreur linker incompréhensible MSVC
    Par PsyKo BoY dans le forum C++
    Réponses: 12
    Dernier message: 22/03/2010, 17h19
  2. [SQL] Erreur de requête incompréhensible
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/09/2006, 13h42
  3. [windows.h] Erreur du linker : LNK2019
    Par Cube* dans le forum Visual C++
    Réponses: 3
    Dernier message: 01/09/2006, 22h40
  4. [W3C] Erreurs de validation incompréhensibles
    Par brotelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 12/05/2006, 12h03
  5. Réponses: 5
    Dernier message: 22/02/2006, 18h21

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