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 :

Détection de problèmes de link inexistants


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut Détection de problèmes de link inexistants
    Bonjour,

    Je rencontre un problème assez étrange en voulant linker mon programme sous Visual C++ 2008. Il me sort des erreurs me disant que certains symboles de boost::filesystem::path sont déjà définis ailleurs, dans une autre librairie. Bien évidemment, cela est complètement faux. D'ailleurs le problème n'apparaît que si je lie dynamiquement avec Boost, statiquement, tout est OK.

    Pour l'instant je m'en sors en ajoutant /FORCE:MULTIPLE à mes options de link, mais je ne considère pas ça comme une solution correcte car cela pourrait occulter un jour de véritables erreurs.

    Auriez-vous des indications sur ce problème ? Merci

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Citation Envoyé par Tan Phi Voir le message
    que certains symboles de boost::filesystem::path sont déjà définis ailleurs, dans une autre librairie. Bien évidemment, cela est complètement faux.
    Vous faites une grossière erreur, ce type de problème a toujours pour source un truc entre la chaise et le clavier.

    Normalement, le linker indique les fichiers lib ou obj qui contient les choses en conflits.

    C'est quoi précisément le message d'erreur ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Il s'agit d'une erreur LNK2005. Je n'ai pas le message en tête comme ça (et je ne suis pas au boulot pour vous le poster tout de suite), mais pour résumer, le message indique que boost::filesystem::~path est déjà défini dans Runtime.obj, cet objet faisant partie d'une autre librairie développée en interne par ma boîte.

    Même problème ensuite avec boost::filesystem::string. En debug, il y en a un troisième qui apparaît, mais j'ai oublié lequel.

    En écrivant ces mots, je pense avoir deviné le problème : Boost.Filesystem doit être lié statiquement à cette librairie interne. Mon programme qui utilise cette librairie, ainsi que filesystem directement (mais lié dynamiquement), y voit donc une double définition.

    Cela transforme un peu ma question et sort du cadre du forum VC++, mais je pose au cas où : comment faire comprendre à CMake qu'on veut lier statiquement boost, sauf une librairie (en l'occurence Boost.Thread) ? La variable Boost_USE_STATIC_LIBS ne permet que de faire tout l'un ou tout l'autre. J'ai tenté de définir BOOST_THREAD_DYN_LINK pour le préprocesseur, mais ça n'a pas fonctionné.

    Pour répondre tout de suite à la question de pourquoi je fais un truc pareil, c'est parce que malheureusement, j'ai des MFC un peu partout dans le programme. Boost.Thread lié statiquement avec les MFC pose des problèmes, mais dynamiquement c'est OK (cf http://www.juicydata.com/LinkingMfcAndBoostThread).

    J'ai bien conscience que la meilleure solution serait de prendre le temps de virer tous les MFC, mais ça prendrait trop de temps et mon employeur ferait les gros yeux. ;-)

    Merci en tout cas de vous pencher sur mon problème.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Heu, pourquoi ne pas faire de Runtime une Dll ?

    P.S.: Une dette technique, faut toujours la payer, alors virer les MFC si vous n'en avez pas besoin.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Oui j'y ai pensé après avoir posté mon dernier message. C'est sûr que ça devrait marcher. La seule chose qui me retient de le faire n'est pas un problème technique, mais un problème de travail en équipe. En faisant cela, je vais aller à l'encontre de la pratique courante dans ma boîte (ce sera même à ma connaissance un cas unique) et comme je ne serai pas le mainteneur de ce projet, ça ne fera qu'amener de la confusion chez les autres. Autant aller vers le plus simple et le plus facile à maintenir.

    Je pense que je vais aller voir mon chef et tenter de le convaincre que l'effort de virer les MFC en vaut la peine.

    Je passe la discussion en résolue. Après tout ma question initiale l'est. ;-)
    Merci en tout cas d'avoir réfléchi à mon problème.

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

Discussions similaires

  1. Flush hosts et détection de problème
    Par psychomatt dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/07/2005, 14h39
  2. Problème de link...
    Par Royd938 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/09/2004, 17h33
  3. C/asm : problème pour link
    Par SteelBox dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/04/2004, 23h03
  4. Problème de LINK Bizarre !!
    Par Jasmine dans le forum MFC
    Réponses: 24
    Dernier message: 19/03/2004, 15h58
  5. Problème de link avec Borland C++ 5.5
    Par gelam dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/11/2003, 16h45

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