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

VC++ .NET Discussion :

Compilation /MD /MT dans VS 2005


Sujet :

VC++ .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut Compilation /MD /MT dans VS 2005
    Bonjour,

    Un projet existant sous VS 2003 était compilé avec l'option /MT (car il gère plusieurs threads)

    J'ai retravaillé sur cette application, notament pour y ajouter une prise en charge de Web Service (automatique avec sproxy), j'ai donc été obligé d'ajouter /clr pour la compilation.

    Hors, /clr m'interdit d'utiliser /MT j'ai donc utilisé /MD ...mais je n'en connais pas la différence.
    La compilation se passe bien, mais j'ai quelques comportement différents entre les deux versions..

    Quelles sont les conséquences d'une compilation avec /MD par rapport à /MT ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    /MT : Liaison statique avec la C Run-Time library : Un gros exécutable, indépendant de MSVCRT/MSVCR71/MSVCR80.DLL. Par contre, risque de problèmes si tu utilises des DLLs.

    /MD : Utilise la DLL pour la C Run-Time library : Un exécutable plus petit, mais qui a besoin d'avoir la bonne version de la DLL (voire plus, pour la version 8)sur le PC de destination. Mais normalement, pas de problème avec les autres DLLs, car il me semble qu'une DLL est obligatoirement compilée en /MD.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Ok...

    Ok, le soucis, c'est qu'apparement, on ne peut pas faire cohabiter /MT et /clr.
    Hors quand je compile en /MD, mon programme un comportement bizarre...plus quelques erreurs au lancement de programmes connexes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.IO.__Error.WinIOError(...)  C:\(...)\Local Settings\Temp\(nomaleatoire).dll introuvable...
    Comme je ne comprends pas réellement les différences de comportement entre un exe en /MT et en /MD, je ne comprends pas d'ou viennent les erreurs....

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Donc ma question :

    Si je veux un gros exécutable avec tout dedans (parceque je ne vois pas comment générer de DLLs) et pouvoir utiliser les fonctions CLR, comment puis-je faire ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Il n'est pas question ici de générer des DLLs, mais d'utiliser une DLL déjà fournie par Microsoft.

    Et le .Net ne permet pas de lier statiquement à la CRT, tu n'as donc pas le choix: Tu dois compiler en /MD et garder à l'esprit que tu dois avoir à portée de main la DLL de la CRT...
    (pour VS2003, elle doit s'appeler MSVCR71.DLL, et la bibliothèque standard C++ est MSVCP71.DLL)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Je compile avec VS2005 :

    Sur mon poste client, j'ai bien msvcr80.dll dans C:\Windows\WinSxS\x86_Microsoft.VC80.CRT_(caractere aleatoire)
    à plusieurs endroits (caractère aléatoire différent)

    par contre, j'ai la msvcr7.1.dll dans System32 et dans le dossier du framework .NET 1.1 , et bizarrement pas dans le .NET 2.0

    Faut-il que j'en mette une copie à coté de mon exe., ou dans System32 ou cela suffit-il ?

Discussions similaires

  1. [C# 1.1/VS] Comment compiler 1.1 dans Visual Studio 2005 ?
    Par Aliend dans le forum Visual Studio
    Réponses: 4
    Dernier message: 08/09/2006, 10h09
  2. importer lib compilée en c dans projet c++ express 2005
    Par drpark dans le forum Visual C++
    Réponses: 5
    Dernier message: 25/07/2006, 15h21
  3. Erreur de compilation de winsock.h dans VC++2005
    Par Jakariba dans le forum MFC
    Réponses: 3
    Dernier message: 24/05/2006, 15h54
  4. [Firebird] quels composants dans Delphi 2005
    Par Harry dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/04/2005, 15h29
  5. inclus ou pas inclus dans delphi 2005
    Par lopezpacheco dans le forum Débuter
    Réponses: 4
    Dernier message: 11/02/2005, 00h43

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