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

Langage C++ Discussion :

Erreur lors du link error LNK2019


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut Erreur lors du link error LNK2019
    Bonjour,

    J'ai un souci alors de la compilation d'une dll le linker de VC++ me renvoie des erreurs LNK2019 dont voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>IndexManager.obj : error LNK2019: unresolved external symbol "public: __cdecl LinksServerCore::RankIndex<unsigned __int64,class Hyperlink>::RankIndex<unsigned __int64,class Hyperlink>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0?$RankIndex@_KVHyperlink@@@LinksS...@D@2@@std@@0@Z) referenced in function "public: __cdecl LinksServerCore::IndexManager::IndexManager(void)" (??0IndexManager@LinksServerCore@@QEAA@XZ)

    J'ai beau cherché je ne vois pas du tout ce que j'ai pu oublier, si l'un de vous a une petite idée de ce qui cloche .

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, typiquement, les erreurs de link et les "unresolved external symbol" t'indiquent soit qu'il te manque un fichier d'implémentation (ou, du moins, qu'un fichier d'implémentation n'a pas été compilé), soit que tu as oublié d'indiquer à l'éditeur de lien une bibliothèque dont ton projet dépend afin qu'il aille rechercher dedans les symboles manquants.

    Dans le premier cas, il faut veiller à ce que le fichier comprenant l'implémentaiton des fonctions membres de la classe LinksServerCore (car c'est de elle qu'il s'agit) fasse bien partie du projet, dans le second, il faut veiller à ce que la bibliothèque soit bien ajoutée aux options de compilation du projet (typiquement dans "propriétés" -> "linker"->input.

    Une autre raison, spécifique aux dll est que les symboles qui doivent être accessibles depuis l'extérieur de la dll doivent être exportés lors de la compilation de celle-ci et importés lors de son utilisation.

    Cela se fait généralement à l'aide d'un défine conditionnel proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef MYDLL_API
    #ifdef BUILD_DLL
    #define MYDLL_API __declspec(dllexport)
    #else
    #define MYDLL_API __declspec(dllimport)
    #endif // BUILD_MYDLL
    #endif  // MYDLL_API
    en fournissant le qualificateur d'appel à la classe sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MYDLL_API MyClass
    {
        //what ever
    };
    et en ajoutant -DBUILD_MYDLL à la ligne de commande lors de la compilation (ce qui peut aussi se faire en rajoutant la ligne BUILD_DLL dans les propriétés du projet->C/C++->preprocesseur-> définitions préprocesseur )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Autre hypothèse : problème de template ? Cf F.A.Q. Pourquoi mes templates ne sont-ils pas reconnus à l'édition des liens ?

  4. #4
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut
    Je vais tester ces solutions ce soir.

    Merci

  5. #5
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut
    Bonsoir,

    J'ai monté un projet de test j'ai testé l'actuce de l'inclusion des fichiers de code dans les headers pour mes class template mais il me reste un souci.

    Je vous mets le code avant :

    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
     
    #pragma once
    #include "stdafx.h"
    #ifndef EXEMPLE_H
    #define EXEMPLE_H
    template<typename TKey>
    class Test
    {
    public:
      Test();
      void Affiche(Tkey key);
    };
     
    #include "Test.htt" // <-- astuce ici !!!
    #endif
    le fichier cpp qui va bien ici .htt
    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
     
     
    #include "stdafx.h"
    #include "Test.h"
    //using namespace std;
    #ifndef EXEMPLE_H
    template<typename TKey>
    Test<TKey>::Test()
    {
    }
     
     
    template<typename TKey>
    void Test<TKey>::Affiche(Tkey key)
    {
       cout << key << endl;
    }
    #endif
     
    sdsd

    J'ai une erreur C2660 de VC++ qui me prétend que ma méthode Affiche(x) ne prend pas d'argument ...

    Et une erreur C2061 ou VC++ prétend qu'il ne connait pas le type TKey pour ma méthode Affiche(Tkey key).

    N'étant pas un grand spécialiste de C++ pourriez-vous m'expliquer le pourquoi de ces erreurs ?

    Cordialement..

  6. #6
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut
    J'ai fini par trouver j'aii tout simplement mis le contenu du code de mes class template dans les fichiers H qui vont bien.


    Merci à vous

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

Discussions similaires

  1. Erreur lors du LINKING de mon programme
    Par halil.zakaria dans le forum C++
    Réponses: 5
    Dernier message: 10/03/2013, 00h24
  2. Réponses: 0
    Dernier message: 11/08/2011, 17h21
  3. Réponses: 20
    Dernier message: 18/01/2011, 12h47
  4. [XL-2003] Récupérer le type d'erreur lors d'un on error
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/07/2009, 15h03
  5. [Visual Studio C++]Error Lors du link
    Par azalsup dans le forum C++
    Réponses: 2
    Dernier message: 22/01/2008, 09h28

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