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 :

Conflit de symboles dans une librairie statique


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Par défaut Conflit de symboles dans une librairie statique
    Hello,

    J'ai un soucis assez ennuyeux sous Visual C++ 2005 Express, et qui concerne donc le nom des symboles générés dans le cas des librairies statiques.

    Je m'explique : j'utilise Visual Studio pour générer des librairies statiques que j'utilise ensuite en externe à l'environnement de Visual Studio, afin de générer manuellement des EXE à l'aide d'un linker - tout à fait fonctionnel, je le précise tout de suite (polink, de PellesC).

    Après quelques recherches dans un éditeur hexa et suppression/ajout de code sous Visual Studio, j'ai remarqué que le problème, c'est que chaque case dans un switch (le switch du C/C++) présent dans ma librairie génère un symbole de la forme $LN1, $LN2 ... $LNn.

    C'est la répétition de ces symboles qui pose problème, lorsque j'utilise dans deux switchs différents une même valeur d'entrée de case.

    Voilà la question : comment faire en sorte que les symboles générés dans ma librairie statique soient uniques ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Par défaut
    Petite mise à jour. Il semblerait possible que j'ai mal cerné mon problème. Ce n'est pas l'utilisation systématique du switch/case qui cause ce problème de symbole défini plusieurs fois, mais l'utilisation de deux switch/case ou plus...

    Par exemple, ceci écrit une fois (a priori un cas banal), ne posera pas de problème, mais si écrit deux fois dans deux fonctions différentes, j'aurais le soucis de duplication de symboles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	switch (messageType)
    	{
    		case 0: result = 1; break;
    		case 1: result = 3; break;
    		case 2: result = 5; break;
    		case 3: result = 7; break;
    		default: result = 0; break;
    	}
    Je dois avouer que ce problème me laisse un peu perplexe... A noter que sou GCC, la compilation de ma librairie ne cause pas ce problème, le soucis est donc bien localisé dans Visual Studio.

    [Edit] Encore une mise à jour. J'ai totalement exclut libcmt.lib du projet, et ce sont donc finalement uniquement les symboles internes à ma librairie statique qui s'entrechoquent lorsque j'utilise plusieurs case avec une même valeur d'entrée en différents points de la librairie. Mise à jour du post ci-dessus.

    [Edit 2] En activant l'optimisation /O2 (maximize speed), le problème disparaît. J'essaie de voir dans le code ASM les différences. Je commence à pencher pour un défaut de mon linker :/.

Discussions similaires

  1. Réponses: 20
    Dernier message: 14/06/2008, 12h05
  2. Tableau de constantes dans une classe statique
    Par Nico_stras dans le forum C#
    Réponses: 4
    Dernier message: 05/03/2007, 20h18
  3. conflit d'ecriture dans une table
    Par laurent.w dans le forum Access
    Réponses: 6
    Dernier message: 25/01/2007, 17h02
  4. Réponses: 5
    Dernier message: 27/08/2006, 14h24
  5. Recherche des symboles dans une lib c++
    Par firens dans le forum MFC
    Réponses: 4
    Dernier message: 31/03/2006, 14h56

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