Résolution des problèmes pour le compilateur Microsoft Visual C++ ou l’éditeur de liens Visual C++
Cet article fournit des solutions pour résoudre les problèmes liés au compilateur Visual C++ ou à l’éditeur de liens Visual C++.
S’applique à : Microsoft Visual C++ 2010 Express, Visual Studio
Numéro de la base de connaissances d’origine : 974229
Action
Lors de l’examen d’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 présente des conseils de dépannage pour vous aider à résoudre votre problème de génération 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 (c’est-à-dire, C1001), les blocages ou les plantages, 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 définir la propriété Générer un fichier prétraité sur Avec numéros de ligne (/P) ou Sans numéros de ligne (/EP /P). Cette propriété se trouve sous les pages de propriétés du projet sous Propriétés de configuration, C/C++, Paramètres du préprocesseur.
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 fichier unique 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 dans 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 en cours de compilation, 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.
Remarque
La compilation se poursuit après la phase de préprocesseur lors de l’utilisation de ce commutateur, c’est-à-dire qu’aucun fichier n’est
.OBJ
généré par le compilateur et que vous pouvez obtenir une erreur de lien indiquant que les fichiers OBJ sont introuvables.Vous pouvez compiler le fichier de sortie du préprocesseur seul en dehors du contexte d’un projet Visual Studio. Le
.i
fichier contient tout le code du fichier d’en-tête, le remplacement de macro et les informations de directive du compilateur prétraité 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 être en mesure de reproduire un problème de compilation sans aucune dépendance sur d’autres fichiers. Le fichier résultant est souvent volumineux et contient une grande quantité d’espaces blancs.Problèmes de liaison
Pour les problèmes de l’éditeur de liens (erreurs de type LNKxxxx), vous pouvez utiliser le commutateur de ligne de commande de l’éditeur de liens /LINKREPRO pour générer un cas de test contenant uniquement des entrées de l’éditeur de liens sans aucune dépendance vis-à-vis des 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 par le chemin d’accès du dossier local existant. Par exemple :/LINKREPRO:C:\TEMP\LINKREPRO\
.S’il existe déjà d’autres options d’éditeur de liens 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. Il est installé dans le menu Démarrer, dans le dossier Visual Studio sous le sous-dossier Visual Studio Tools.
Créez la
LINK_REPRO
variable d’environnement 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 afin qu’il partage une copie de l’environnement que vous avez modifié.
Ouvrez le projet et effectuez une opération Reconstruire tout le projet.
Quand LINK.EXE est appelé dans la build, il copie tout ce dont il a besoin pour lier votre projet dans le répertoire linkrepro. Parmi les fichiers copiés figurent vos fichiers objets (. 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), de sorte que LINK ne dépend plus de votre fichier de solution.
Pour vérifier 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 linkrepro :
LINK @link.rsp
.Avant cela, 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.
Clause d’exclusion de responsabilité
Exclusion de responsabilité de publication rapide
Les articles de publication rapide fournissent des informations directement dans les organization de support Microsoft. Les informations contenues dans les présentes 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 déclaration ou garantie quant à la pertinence, à la fiabilité ou à l’exactitude des informations contenues dans les documents et les graphiques associés publiés sur ce site Web (les « supports ») à quelque fin que ce soit. Les documents peuvent contenir 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 rejettent et excluent toutes les représentations, garanties et conditions qu’elles soient expresses, implicites ou légales, y compris, mais sans s’y limiter, les représentations, les garanties ou conditions de titre, l’absence de contrefaçon, la condition satisfaisante ou la qualité, la qualité, la qualité marchande et l’adéquation à un usage particulier, en ce qui concerne les matériaux.