Устранение неполадок компилятора Microsoft Visual C++ или компоновщика Visual C++
В этой статье приведены решения по устранению неполадок компилятора Visual C++ или компоновщика Visual C++.
Область применения: Microsoft Visual C++ 2010 Express, Visual Studio
Исходный номер базы знаний: 974229
Действие
При изучении возможной проблемы с компилятором Microsoft Visual C++ или компоновщиком важно получить как можно больше сведений о процессе сборки и используемых параметрах. В этой статье рассматриваются некоторые советы по устранению неполадок, которые помогут решить проблему сборки или получить исчерпывающую информацию для служба поддержки Майкрософт.
Разрешение
Проблемы компилятора
Для проблем компилятора, таких как внутренние ошибки компилятора (то есть C1001), зависания или сбои, может быть полезно записать выходные данные препроцессора C/C++, чтобы предоставить упрощенный воспроизводимый пример проблемы. В интегрированной среде разработки Visual C++ это можно сделать, задав для свойства Generate Preprocessed File значение With Line Numbers (/P) или Without Line Numbers (/EP /P)). Это свойство можно найти на страницах свойств проекта в разделе Свойства конфигурации, C/C++, Параметры препроцессора.
Этот параметр можно задать на уровне проекта в меню Проект, Свойства, в этом случае он будет создавать
.i
файлы для всех исходных файлов в проекте или для одного файла, щелкнув правой кнопкой мыши файл в обозревателе решений, выбрав контекстное меню Свойства, чтобы открыть диалоговое окно свойств для одного файла.Переключатель компилятора /P направляет CL.EXE для записи выходных данных препроцессора в файл. Добавление /EP приведет к подавлению добавления сведений о номере строки в результирующий файл. /P достаточно, но /EP /P создаст меньший выходной файл. Созданный выходной файл препроцессора будет иметь то же имя, что и компилируемый исходный файл, но с расширением a.i, например, file1.cpp создает выходной файл препроцессора file1.i в том же каталоге.
Примечание.
Компиляция будет продолжаться после этапа препроцессора при использовании этого параметра, то есть компилятор не
.OBJ
создаст файл, и вы можете получить ошибку связи, отражающую тот факт, что OBJ-файлы не могут быть найдены.Выходной файл препроцессора можно скомпилировать самостоятельно вне контекста проекта Visual Studio. Файл
.i
содержит весь код файла заголовка, замену макросов и предварительно обработанные сведения о директиве компилятора, необходимые для компиляции этого конкретного.C
или.CPP
исходного файла. Другими словами, это автономный модуль, который должен быть в состоянии воспроизвести проблему компиляции без каких-либо зависимостей от других файлов. Результирующий файл часто будет большим и содержать большое количество пробелов.Проблемы с связыванием
Для проблем компоновщика (ошибки типа LNKxxxx) можно использовать параметр командной строки компоновщика /LINKREPRO, чтобы создать тестовый случай, содержащий только входные данные компоновщика без зависимости от исходных файлов. /LINKREPRO использует следующий синтаксис:
/LINKREPRO:<path>
'<path>'
— это полный путь к пустой папке в локальной файловой системе. Эта папка уже должна существовать. Компоновщик не создаст ее автоматически и создаст ошибку, если папка не существует.Этот параметр не предоставляется непосредственно в системе проектов. Чтобы добавить его в сборку, откройте меню Свойства проекта в меню Проект . В разделе Свойства конфигурациикомпоновщик, командная строка в поле редактирования Дополнительные параметры введите
/LINKREPRO:<path>
параметр (включая косую черту) и замените путь на путь к уже существующей локальной папке. Пример:/LINKREPRO:C:\TEMP\LINKREPRO\
.Если в этом поле редактирования уже есть другие параметры компоновщика, разделите их запятыми.
Кроме того, можно использовать переменную
LINK_REPRO
среды.LINK_REPRO
Если переменная среды существует, компоновщик считывает выходной путь из переменной среды и создает linkrepro. Параметр /LINKREPRO не требуется при использовании переменнойLINK_REPRO
среды. Чтобы использовать переменную среды,LINK_REPRO
выполните следующие действия:Откройте командную строку Visual Studio. Он устанавливается в меню Пуск в папке Visual Studio во вложенной папке Инструменты Visual Studio.
LINK_REPRO
Создайте переменную среды, указывающую на существующий и пустой каталог, например :SET LINK_REPRO=C:\TEMP\LINKREPRO\
.Запустите Visual Studio из той же командной строки, чтобы она совместно использует копию среды, которую вы изменили.
Откройте проект и выполните перестроение всего проекта.
При вызове LINK.EXE в сборке все необходимое для связывания проекта будет скопировано в каталог linkrepro. Среди скопированных файлов будут файлы объектов (. OBJ), обязательные файлы библиотеки (. LIB), включая библиотеки Майкрософт и файл ответа компоновщика (LINK. RSP), чтобы link больше не зависела от файла решения.
Чтобы убедиться, что у вас есть все необходимые файлы для воспроизведения проблемы со ссылкой, можно запустить LINK в каталоге, указанном переменной среды LINK_REPRO, с помощью файла ответа компоновщика, созданного linkrepro:
LINK @link.rsp
.Перед этим используйте следующую команду, чтобы отключить эту функцию при использовании переменной среды командной строки:
SET LINK_REPRO=
.Этот процесс также можно использовать для проверки файлов, участвующих в создании библиотеки, при использовании LIB.EXE или LINK /LIB.
Заявление об отказе от ответственности
Заявление об отказе от ответственности для быстрой публикации
Статьи о быстрой публикации содержат сведения непосредственно из организации поддержки Майкрософт. Информация, содержащаяся в этом документе, создается в ответ на новые или уникальные темы или предназначена для дополнения других база знаний информации.
Заявление об отказе от ответственности
Корпорация Майкрософт и (или) ее поставщики не делают никаких заявлений или гарантий относительно пригодности, надежности или точности информации, содержащейся в документах и связанных с ними рисунках, опубликованных на этом веб-сайте ("материалы"), для каких-либо целей. Материалы могут содержать технические неточности или опечатки и могут быть пересмотрены в любое время без уведомления.
В максимальной степени, разрешенной применимым законодательством, корпорация Майкрософт и (или) ее поставщики отказывается от ответственности и исключают все заявления, гарантии и условия, будь то явные, подразумеваемые или установленные законом, включая, помимо прочего, представления, гарантии или условия правового титула, ненарушения, удовлетворительное состояние или качество, товарное качество и пригодность для конкретной цели в отношении материалов.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по