Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article fournit des résolutions pour la résolution des problèmes pour le compilateur Visual C++ ou l’éditeur de liens Visual C++.
S’applique à : Microsoft Visual C++ 2010 Express, Visual Studio
Numéro de base de connaissances d’origine : 974229
Action
Lorsque vous examinez un problème possible avec le compilateur ou l’éditeur de liens Microsoft Visual C++, il est important d’obtenir autant d’informations que possible sur le processus de génération et les options utilisées. Cet article décrit quelques conseils de dépannage pour vous aider à résoudre votre problème de build ou à capturer des informations complètes pour Support Microsoft.
Résolution
Problèmes du compilateur
Pour les problèmes du compilateur, tels que les erreurs internes du compilateur (autrement dit, C1001), se bloque ou se bloque, il peut être utile de capturer la sortie du préprocesseur C/C++ afin de fournir un exemple de problème reproductible simplifié. Dans l’IDE Visual C++, vous pouvez le faire en définissant la propriété Generate Preprocessed File sur With Line Numbers (/P) ou Without Line Numbers (/EP /P). Cette propriété se trouve sous les pages de propriétés du projet sous Propriétés de configuration, paramètres de préprocesseur C/C++.
Ce paramètre peut être défini au niveau du projet à partir du menu Projet, propriétés auquel cas il génère
.i
des fichiers pour tous les fichiers sources du projet ou il peut être défini pour un seul fichier en cliquant avec le bouton droit sur le fichier dans l’Explorateur de solutions, en sélectionnant le menu contextuel Propriétés pour afficher la boîte de dialogue propriétés du fichier unique.Le commutateur du compilateur /P dirige CL.EXE pour capturer la sortie du préprocesseur vers un fichier. L’ajout de /EP supprime l’ajout d’informations de numéro de ligne au fichier résultant. /P est suffisant, mais /EP /P génère un fichier de sortie plus petit. Le fichier de sortie de préprocesseur généré aura le même nom que le fichier source compilé, mais avec l’extension de fichier a.i, par exemple, file1.cpp génère un fichier de sortie de préprocesseur file1.i dans le même répertoire.
Note
La compilation se poursuit après la phase de préprocesseur lors de l’utilisation de ce commutateur, autrement dit, aucun fichier n’est
.OBJ
généré par le compilateur et vous risquez d’obtenir une erreur de lien reflétant le fait que les fichiers OBJ ne sont pas trouvés.Vous pouvez compiler le fichier de sortie de préprocesseur lui-même en dehors du contexte d’un projet Visual Studio. Le
.i
fichier contient tout le code du fichier d’en-tête, le remplacement des macros et les informations de directive du compilateur prétraite nécessaires à la compilation de ce fichier particulier.C
ou.CPP
source. En d’autres termes, il s’agit d’un module autonome qui doit pouvoir reproduire un problème de compilation sans dépendances sur d’autres fichiers. Le fichier résultant est souvent volumineux et contient une grande quantité d’espace blanc.Problèmes liés
Pour les problèmes liés à l’éditeur de liens (erreurs de type LNKxxxx), vous pouvez utiliser le commutateur de ligne de commande /LINKREPRO linker pour générer un cas de test contenant uniquement des entrées de l’éditeur de liens sans dépendance sur les fichiers sources. /LINKREPRO utilise la syntaxe suivante :
/LINKREPRO:<path>
'<path>'
est le chemin complet d’un dossier vide sur le système de fichiers local. Ce dossier doit déjà exister : l’éditeur de liens ne le crée pas automatiquement et génère une erreur si le dossier n’existe pas.Cette option n’est pas directement exposée dans le système de projet. Pour l’ajouter à une build, ouvrez le menu Propriétés du projet à partir du menu Projet. Dans Propriétés de configuration, Éditeur de liens, Ligne de commande, dans la zone d’édition Options supplémentaires, entrez le
/LINKREPRO:<path>
commutateur (y compris la barre oblique) et remplacez le chemin d’accès par le chemin du dossier local préexistant. Par exemple :/LINKREPRO:C:\TEMP\LINKREPRO\
.S’il existe d’autres options d’éditeur de liens déjà dans cette zone d’édition, séparez-les par des virgules.
Vous pouvez également utiliser une variable d’environnement
LINK_REPRO
. Si laLINK_REPRO
variable d’environnement existe, l’éditeur de liens lit le chemin de sortie de la variable d’environnement et génère un linkrepro. Le commutateur /LINKREPRO n’est pas nécessaire lors de l’utilisation de la variable d’environnementLINK_REPRO
. Pour utiliser la variable d’environnementLINK_REPRO
:Ouvrez une invite de commandes Visual Studio. Cette opération est installée sous le menu Démarrer , dans le dossier Visual Studio sous le sous-dossier Visual Studio Tools.
Créez la variable d’environnement
LINK_REPRO
pointant vers un répertoire existant et vide, par exemple :SET LINK_REPRO=C:\TEMP\LINKREPRO\
.Exécutez Visual Studio à partir de la même invite de commandes pour qu’il partage une copie de l’environnement que vous avez modifié.
Ouvrez le projet et effectuez une reconstruction de tout le projet.
Lorsque LINK.EXE est appelée dans la build, elle copie tout ce dont il a besoin pour lier votre projet au répertoire linkrepro. Parmi les fichiers copiés, il s’agira de vos fichiers objet (. OBJ), fichiers de bibliothèque requis (. LIB), y compris les bibliothèques Microsoft et un fichier de réponse de l’éditeur de liens (LINK). RSP), afin que LINK ne dépend plus de votre fichier solution.
Pour confirmer que vous disposez de tous les fichiers nécessaires pour reproduire le problème de lien, vous pouvez exécuter LINK dans le répertoire spécifié par la variable d’environnement LINK_REPRO, à l’aide du fichier de réponse de l’éditeur de liens généré par le linkrepro :
LINK @link.rsp
.Avant de procéder ainsi, utilisez la commande suivante pour désactiver cette fonctionnalité si vous utilisez la variable d’environnement de ligne de commande :
SET LINK_REPRO=
.Vous pouvez également utiliser ce processus pour vérifier les fichiers impliqués dans la création d’une bibliothèque, lorsque vous utilisez LIB.EXE ou LINK /LIB.
Exclusion de responsabilité
Exclusion de responsabilité de publication rapide
Les articles de publication rapide fournissent des informations directement à partir de l’organisation de support Microsoft. Les informations contenues dans ce document sont créées en réponse à des sujets émergents ou uniques, ou sont destinées à compléter d’autres informations base de connaissances.
Clause d’exclusion de responsabilité
Microsoft et/ou ses fournisseurs ne font aucune représentation ni garantie concernant la pertinence, la fiabilité ou l’exactitude des informations contenues dans les documents et les graphiques connexes publiés sur ce site web (les « documents ») à des fins quelconques. Les documents peuvent inclure des inexactitudes techniques ou des erreurs typographiques et peuvent être révisés à tout moment sans préavis.
Dans la mesure maximale autorisée par la loi applicable, Microsoft et/ou ses fournisseurs excluent toutes les représentations, garanties et conditions expresses, implicites ou légales, y compris, mais non limitées aux représentations, garanties ou conditions de titre, non violation, condition satisfaisante ou qualité, qualité et adéquation à un usage particulier, en ce qui concerne les matériaux.