Устранение неполадок компилятора 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 выполните следующие действия:

    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, с помощью файла ответа компоновщика, созданного linkrepro: LINK @link.rsp.

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

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

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

Заявление об отказе от ответственности для быстрой публикации

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

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

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

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