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 :

[VS 2005] Debug/Release


Sujet :

C++

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Points : 545
    Points
    545
    Par défaut [VS 2005] Debug/Release
    Voila, j'ai un projet qui utilise log4cxx.
    Lorsque j'exécute mon programme sous VS2005 en mode Debug, je dois utiliser la libraire :
    D:\Program\apache-log4cxx-0.10.0\projects\Debug\log4cxx.dll
    Par contre, si j'execute en mode Release, je dois utiliser la libraire :
    D:\Program\apache-log4cxx-0.10.0\projects\Release\log4cxx.dll

    La question est que je peux pas mettre dans le PATH Windows a la fois
    D:\Program\apache-log4cxx-0.10.0\projects\Debug\log4cxx.dll
    et
    D:\Program\apache-log4cxx-0.10.0\projects\Release\log4cxx.dll

    Alors comment faire pour que a l'exécution dans Visual, ce soit la bonne librairie qui soit choisie selon que je suis en Debug ou Release ?
    Bien sur, je peux toujours copier la bonne version de log4cxx.dll dans Release ou Debug mais ca me semble un peu sale comme méthode ...

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La bonne solution aurait été que cette bibliothèque ait un nom différent en version debug. A partir de là, je ne vois a priori pas d'autre solution que celle que tu proposes.

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    1. On ne met pas de DLL dans le 'PATH' windows. Cette façon de lier un executable à une DLL date de Mathusalem. Même remarque pour le répertoire Windows (qui d'ailleurs, est normalement interdit d'accès).
    Il y a deux possibilités pour lier un executable à une DLL:
    - Rajouter la DLL dans les chemins de l'executable dans le registre
    - Coller la DLL à coté de l'executable.

    2. Je vois pas pourquoi tu *dois* utiliser la version debug de log4cxx... A moins que tu ne veuilles la débugger bien sur
    Utiliser la version release, ne changera rien, sauf qu'elle sera plus rapide, plus petite, etc... A moins, encore une fois, que tu ne veuilles débugger log4cxx.

    3. Pour faire ce que tu veux faire, tu peux:
    - Créer le répertoire debug/release de ton projet (là ou Visual va linker le .exe), et y coller les DLLs.
    - Rajouter les DLLs dans ton projet (ailleurs), et effectuer (à la compilation) une copie de la DLL vers le répertoire destination de compilation (pas le temporaire). Rassures toi, la copie n'aura lieu que quand la destination ne correspond pas à la source (vive Make ! )
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Dans Windows, Microsoft a pour habitude de livrer les deux versions dans le même répertoire sous deux noms légèrement différents : malib.lib pour la version release et malibd.lib pour la version debug (sans parler du 'u' en plus pour les versions unicode = 4 versions pour la même bibliothèque ).
    Je trouve que c'est une assez moche idée, car il faudrait à terme que tu ajoutes les chemins de toutes les librairies que tu utilises sur un même poste à la variable d'environnement PATH. Je trouve ça un peu lourd.
    Le mieux reste quand même de copier la DLL avec l'exécutable. Attention toutefois à garder la maitrise de quelle(s) DLL est où.
    Le meilleur mieux est encore le linker la librairie statiquement, mais ça n'est pas toujours possible.

    J'ai pris pour habitude, lors de la création d'une solution Visual, d'ajouter un répertoire BIN dans lequel sont placées toutes les sorties de chaque projet (déplacement de la sortie du projet). Ca permet de tout faire sortir au même endroit, et de pas avoir x copies d'un même fichier dans la solution.
    Citation Envoyé par nicroman
    2. Je vois pas pourquoi tu *dois* utiliser la version debug de log4cxx... A moins que tu ne veuilles la débugger bien sur
    Utiliser la version release, ne changera rien, sauf qu'elle sera plus rapide, plus petite, etc... A moins, encore une fois, que tu ne veuilles débugger log4cxx.
    Je dirais bien ça aussi, mais un coin de ma mémoire me fait tilt sur une mauvaise expérience que j'aurais eu. Mais bien sûr je n'arrive pas à remettre la main dessus ...
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour ce qui est de l'utilité de lier la version debug en debug.
    Il peut être utile de ne pas mixer versions debug et release, notamment s'il y a utilisation explicite de la bibliothèque standard et/ou allocations mémoires, car dans ce cas ce n'est pas la même version de la CRT qui est liée côté programme et côté bibliothèque, ce qui provoque la plupart du temps des crashs.

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    tssss tssss ....

    Si il y a utilisation explicite de la librairie standard, alors deux librairies (compatibles) cohabiteront...
    Pour ce qui est des allocations mémoire... si la DLL alloue de la mémoire c'est à elle de la libérer... donc, si log4cxx est bien programmée, il ne devrait pas y avoir de mixage mémoire (sinon ca serait l'horreur avec nos Memory Manager )
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si il y a utilisation explicite de la librairie standard, alors deux librairies (compatibles) cohabiteront...
    Et il se passe quoi si dans la version debug de ma lib standard std::vector a des membres supplémentaires, lorsque je vais appeler une fonction de la bibliothèque qui renvoie un std::vector compilé en release ?

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    C'est bien pour ça que les classes "standards" (de la STL) sont rarement passés (exposés) d'une DLL à une autre... Il se passerait quoi si deux DLLs utilisaient des objets incompatibles (sans parler de debug/release, mais simplement de version !) de la stl ?

    Non, si la DLL est bien faite, il n'y a rien à craindre de ce côté là.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je suis d'accord, mais le problème c'est qu'on est dans ce cas aussi si on a simplement un conteneur standard en donnée membre privée d'une classe exportée. Et ça, difficile de l'éviter.

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Si en cachant l'implémentation...
    De toute manière Visual va afficher de gros warnings dès qu'une classe non exportée (comme un template) est membre d'une classe exportée.
    Il y a deux moyens de résoudre le problême: exporter la spécialisation du template, ou... cacher l'implémentation (qui est probablement la solution la plus élégante).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Conflit 2008 2005 debug release
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 28/11/2008, 09h59
  2. Réponses: 5
    Dernier message: 21/06/2006, 14h02
  3. Passage Mode debug -> release
    Par Bayard dans le forum MFC
    Réponses: 2
    Dernier message: 08/05/2006, 13h06
  4. Réponses: 3
    Dernier message: 18/08/2005, 10h17
  5. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05

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