Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приведены разрешения для устранения неполадок компилятора 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) или Без номеров строк (/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, с помощью файла ответа компоновщика, созданного компоновщиком, созданного компоновщиком:
LINK @link.rsp
Перед этим используйте следующую команду, чтобы отключить эту функцию при использовании переменной среды командной строки:
SET LINK_REPRO=
Этот процесс также можно использовать для проверки файлов, участвующих в создании библиотеки, при использовании LIB.EXE или LINK /LIB.
Заявление об отказе
Отказ от публикации в быстрой публикации
Статьи о быстрой публикации предоставляют информацию непосредственно из организации поддержки Майкрософт. Сведения, содержащиеся в этом документе, создаются в ответ на новые или уникальные темы или предназначены для дополнения других база знаний информации.
Заявление об отказе
Корпорация Майкрософт и(или) ее поставщики не представляют никаких гарантий о пригодности, надежности или точности информации, содержащейся в документах и связанной графике, опубликованной на этом веб-сайте (материалы) для любой цели. Материалы могут включать технические неточности или типографические ошибки и могут быть изменены в любое время без уведомления.
В максимальной степени, разрешенной применимым законом, корпорация Майкрософт и/или ее поставщики отказывается от всех представлений, гарантий и условий, будь то явные, подразумеваемые или нормативные, включая, но не ограничиваясь представлениями, ордерами или условиями названия, не нарушения, удовлетворительного состояния или качества, торговой возможности и пригодности для определенной цели в отношении материалов.