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

Par Gilles Vollant

info@winimage.com

Cet article est disponible en version anglaise, sur le site developpez.com, et d'autre information sont disponible sur la section 64 bits computing du forum de Gilles Vollant.

 

Introduction

Windows 64 bits est disponible pour 2 plateformes:

 

En avril 2005, Microsoft a sortis plusieurs logiciels, marquant l'arrivée massive de Windows 64 bits :

 

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 :

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.

 

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.

 

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:

 

Automatisation de la compilation dans un batch

Nous pouvons créer un batch 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.