Поделиться через


Устранение неполадок компилятора 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) или Без номеров строк (/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 переменную среды, выполните следующие действия.

    1. Откройте командную строку Visual Studio. Это устанавливается в меню "Пуск" в папке Visual Studio под вложенной папкой Инструменты Visual Studio.

    2. LINK_REPRO Создайте переменную среды, указывающую на существующий и пустой каталог, например: SET LINK_REPRO=C:\TEMP\LINKREPRO\

    3. Запустите Visual Studio из той же командной строки, чтобы она совместно использует копию измененной среды.

    4. Откройте проект и выполните перестроение всего проекта.

    При вызове LINK.EXE в сборке все необходимое для связывания проекта с каталогом linkrepro. Среди скопированных файлов будут файлы объектов (. OBJ), необходимые файлы библиотеки (. LIB, включая библиотеки Майкрософт, и файл ответа компоновщика (LINK). RSP), поэтому LINK больше не зависит от файла решения.

    Чтобы убедиться, что у вас есть все необходимые файлы для воспроизведения проблемы ссылки, можно запустить LINK в каталоге, указанном переменной среды LINK_REPRO, с помощью файла ответа компоновщика, созданного компоновщиком, созданного компоновщиком: LINK @link.rsp

    Перед этим используйте следующую команду, чтобы отключить эту функцию при использовании переменной среды командной строки: SET LINK_REPRO=

    Этот процесс также можно использовать для проверки файлов, участвующих в создании библиотеки, при использовании LIB.EXE или LINK /LIB.

Заявление об отказе

Отказ от публикации в быстрой публикации

Статьи о быстрой публикации предоставляют информацию непосредственно из организации поддержки Майкрософт. Сведения, содержащиеся в этом документе, создаются в ответ на новые или уникальные темы или предназначены для дополнения других база знаний информации.

Заявление об отказе

Корпорация Майкрософт и(или) ее поставщики не представляют никаких гарантий о пригодности, надежности или точности информации, содержащейся в документах и связанной графике, опубликованной на этом веб-сайте (материалы) для любой цели. Материалы могут включать технические неточности или типографические ошибки и могут быть изменены в любое время без уведомления.

В максимальной степени, разрешенной применимым законом, корпорация Майкрософт и/или ее поставщики отказывается от всех представлений, гарантий и условий, будь то явные, подразумеваемые или нормативные, включая, но не ограничиваясь представлениями, ордерами или условиями названия, не нарушения, удовлетворительного состояния или качества, торговой возможности и пригодности для определенной цели в отношении материалов.