IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Utilisation du compilateur 64 bits du Platform SDK et de projet Visual Studio 2005 beta 2

Date de publication : 26/04/2005

Par Gilles Vollant (Site de Gilles Vollant)
 

Depuis avril 2005, Microsoft propose deux solutions pour développez sur Windows 64 bits: la version final du Platform SDK, uniquement en ligne de commande, et Visual Studio 2005, en phase béta. Cet article montre comment utiliser simplement l'environnement de compilation du Platform SDK avec l'interface de Visual Studio 2005


I. Introduction
II. Utilisation de l'environnement Visual Studio 2005 avec les outils du Platform SDK
III. Différence concernant la runtime librairie en DLL
IV. Automatisation de la compilation dans un batch


I. Introduction

    Windows 64 bits est disponible pour 2 plateformes :
  • Depuis 2001 sur Intel Itanium : ce processeur, très puissant et très adapté à la montée en charge (notamment sur des serveurs comprenant de nombreux processeur), est coûteux et assez peu diffusé
  • Depuis 2005 sur le jeux d'instruction x64 (extended 64), appelé également AMD64 ou Intel EM64T. Ce jeux d'instruction est au jeux d'instruction 32 bits des processeur Pentium et Athlon ce que celui du 80386 fut au 80286 : une extension sur une puce parfaitement compatible. Il est disponible sur Amd Athlon 64, Opteron, et sur les derniers Intel Pentium 4 (notamment la série 6xx) et sur les Xeon "nocona". Il sera inclus sur toutes les prochaines générations de processeur de PC d'AMD et d'Intel.
    En avril 2005, Microsoft a sortis plusieurs logiciels, marquant l'arrivée massive de Windows 64 bits :
  • Windows Server 2003 SP1 pour x64 (une version d'évaluation est téléchargeable), Windows server 2003 SP1 pour Itanium et Windows XP pour x64 (le CD d'évaluation peut être commandé). Tous ces systèmes sont en version finale. Les abonnés MSDN peuvent les télécharger sur le MSDN Download.
  • Windows Server 2003 SP1 Platform SDK (en version d'installation Web, Full Download, et image Iso). Ce SDK gratuitement téléchargeable comprend les compilateurs 64 bits Microsoft pour x64 et Itanium (mais pas le compilateur 32 bits, dont une version est disponible sur le Visual C++ toolkit 2003).
  • Windows Server 2003 SP1 DDK, pour développer des drivers. Il est disponible sur le MSDN Download pour les abonnés MSDN, et peut être commandé pour un prix correspondant au port (environs $25).
  • Enfin, pour l'instant uniquement en béta : Visual Studio 2005 beta 2. Il est également disponible sur le MSDN download. Une demande d'évaluation est également possible
Pour un développeur souhaitant sortir rapidement une version 64 bits, il y a un petit inconvénient : soit on développe avec le Platform SDK, mais on n'a pas d'environnement Visual C++ (ce qui oblige à faire des makefile manuels!), soit on utilise un Visual C++ qui est en phase béta.

Heureusement, il est possible d'appeler assez facilement le compilateur, les outils, librairie et include du Platform SDK à partir de l'environnement Visual Studio.

    Il y a pour cela deux solutions :
  • modifier manuellement les répertoires où Visual studio ira chercher tous ce qui est neccessaire à la compilation (dans Tools / Options / Projects and solutions / VC++ Directories). Cela présente deux inconveniants : c'est assez fastidieux, et cela remplace les outils par défauts du Visual Studio 2005, dont on peux avoir besoin pour d'autres projets
  • utiliser l'option "/useenv" de devenv.exe, décrite ainsi: "Use PATH, INCLUDE, LIBPATH, and LIB environment variables instead of IDE paths for VC++ builds.". Cet article va en donner quelques exemples.
La procédure qui suit est valable pour les deux plateformes 64 bits (x64 et Itanium), pour compilé du code C++ non managé (sans utiliser le framework .Net). Mais attention : les librairies du Platform SDK (c'est par exemple le cas des MFC) ne sont pas forcément au même niveau de version que le Visual C++ .Net 2003 32 bits. Si votre application utilise par exemple des fonctionnalités introduite dans les dernières versions des MFC, il pourra être indispensable d'utiliser les librarie de Visual Studio .Net 64 bits. Nous verrons également une différence de comportement au sujet de la runtime librairie "Multithreaded DLL". Bref, la solution proposée dans cet article n'est pas toujours adaptée. Le site Microsoft comprend une page et un article de la KB sur ce sujet.

Par contre, les compilateurs 64 bits proprement dit du platform SDK (tant pour x64 que pour Itanium) sont au niveau de version du Visual Studio 2005. Ils supportent non seulement le "Link code time generation" (appelé "Whole Program Optimisation" dans l'environnement Visual Studio, et décrit dans un article anglais et un autre en français), mais aussi le "Profile-Guided Optimization".

Pour commencer, il faut localiser l'emplacement de devenv.exe. Par défaut, il est installé dans "X:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.com" (ou "X:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com" si vous compiler sur une version 32 bits de Windows). Il est possible de lancer devenv.exe avec le paramètre "/?" pour obtenir la liste des paramètres.


II. Utilisation de l'environnement Visual Studio 2005 avec les outils du Platform SDK

Observons les répertoire par défaut de Visual Studio 2005, en le démarrant de façon standard (en double cliquant sur son icône) :

On peut noter que les répertoires d'exécutables pour Win32 (c'est à dire 32 bits) et x64 sont différent, ce qui logique.

Pour utiliser le compilateur et l'environnement x64 (compilateur, librairie et include) du Platform SDK pour Windows 2003 server SP1, il faut démarrer la ligne de commande correspondante :

Il est alors possible de démarrer Visual Studio 2005 en lui faisant utiliser les variables d'environnement du Platform SDK pour x64 :

Observons les valeurs de répertoires (dans Tools / Options / Projects and solutions / VC++ Directories) :

Les valeurs pour "Plateform x64" correspondent bien au valeur du SDK

Par contre, la "plateform Win32" a obtenu les même caractéristique, et est donc inutilisable :

L'environnement Visual Studio 2005 démarré dans ces conditions ne doit être utilisé que pour la plateforme cible correspondant à la ligne de commande du Plateform SDK à partir de laquelle elle a été lancée.


III. Différence concernant la runtime librairie en DLL

Le Visual C++ permet d'appeler la runtime librairie dans une DLL.

    Mais la librairie d'import msvcrt.lib du Visual Studio 2005 et du Platform SDK ont des différences:
  • Sous Visual Studio 2005, msvcrt.lib fait référence à msvcr80.dll (qui doit donc être obligatoirement redistribué avec votre application) et comprend les fonctions de vérifications utilisé par le "Buffer security check"
  • Avec le Platform SDK, msvcrt.lib fait référence à msvcrt.dll (dont une version est installée avec Windows) et ne comprend pas les fonctions de vérifications utilisé par le "Buffer security check". Il faut alors ajouter manuellement bufferoverflowu.lib dans les options du linker. (Il est également possible de désactiver le "Buffer security check", mais ce n'est pas la solution conseillée).

IV. Automatisation de la compilation dans un batch

Nous pouvons créer un batch comprenant les deux lignes suivantes pour automatiser la compilation. Lancer "devenv /?" pour avoir les specifications des paramètres utilisés dans cet exemple :

"K:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.exe" fdtray_vs8.sln /rebuild "ReleaseCrtDll|x64" /project fdtray_vs8 /useenv /out build_fdtray_x64ksdk.txt type build_fdtray_x64ksdk.txt
Avec l'excellent outils Dependecy Walker (qui est un exemple d'outils qui est disponible sur toutes les plateformes 32 et 64 bits de Windows ayant existée, y compris le mort né - et regretté - Windows 64 bits pour Dec Alpha), nous montre que notre executable est lié à msvcrt.dll. Si il avait été compilé avec les librairie du Visual Studio 2005, il aurait été lié à msvcr80.dll.



Copyright © 2005 Gilles Vollant. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.