aidez-moi s'il vous plaît, j'ai un problème étrange que je ne peux pas résoudre en aucune façon. Prémisse: J'utilise Visual C++ 2005 sur Windows 7 x64, et je suis sûr que mon code n'est pas fatalement défectueux car avec g ++ sous Linux il fonctionne bien.Problème de liaison étrange avec Visual C++ 2005
Je développe une application qui utilise une bibliothèque statique également développée par moi.
Dans la phase de liaison de l'application, j'obtiens deux mystérieuses erreurs LNK2019.
C'est l'en-tête de l'une des classes de la bibliothèque:
namespace sulfur
{
class Quark
{
public:
... various methods
void addAccel(const Vec2 &a);
... various methods
private:
... various data
};
}
Il est évident que dans le fichier cpp i fournir une implémentation pour addAccel avec exactement la même signature.
Lorsque j'essaie de lier l'application à la bibliothèque, toutes les autres fonctions membres sont trouvées, à l'exception de addAccel.
Les recherches de l'éditeur de liens pour le symbole "? AddAccel @ Quark @@ QAEXABV? $ TemplateVec2 @ M @ Z Atlax @@@"
alors que dans le fichier .lib il y a (que je trouve en utilisant dumpbin) " ? addAccel @ Quark @ soufre @@ QAEXABV? $ TemplateVec2 @ M @ Atlax @@@ Z ". La seule différence ici est que l'éditeur de liens recherche un nom tronqué sans la partie espace de noms et je ne sais pas pourquoi.
J'ai essayé de changer le nom, la position, la convention d'appel et la signature de la métode mais en vain, obtenant toujours la même erreur.
La deuxième erreur est très similaire. J'ai un autre en-tête dans la bibliothèque:
namespace sulfur
{
class Cluster
{
...
Quark *addQuark(sulfur::Feature feat, float x, float y, float m=0.1f, float aF=0.01f);
...
};
}
et un fichier d'implémentation correct est fourni. Comme avant, toutes les autres méthodes sont liées correctement, mais pas addQuark.
Les recherches de l'éditeur de liens pour "? AddQuark @ Cluster @ soufre @@ QAEPAVQuark @@ W4Feature @ 2 @ MMMM @ Z"
mais dans la bibliothèque, il est « ? AddQuark @ Cluster @ soufre @@ QAEPAVQuark @ 2 @ W4Feature @ 2 @ MMMM @ Z ".
Cette fois la différence est l'absence du premier '2' entre le '@' dans la version que le compilateur recherche.
Ce n'est pas la première fois que je compile cette application avec Visual Studio et elle a toujours été connectée correctement sauf pour cette fois avec les dernières modifications.
Je n'ai pas la moindre idée, merci d'avance
Si vous exécutez les deux derniers via undname.exe vous verrez que c'est en fait la même erreur - l'une est une méthode sur 'la classe Quark' et l'autre sur' la classe de soufre :: Quark'. – Rup
Oui mais je ne peux pas imaginer pourquoi l'éditeur de liens recherche une classe Quark en dehors de l'espace de noms car elle n'existe même pas. – Mitridas