Устранение неполадок компилятора Microsoft 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.

Отказ от ответственности

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

СТАТЬИ О БЫСТРОЙ ПУБЛИКАЦИИ ПРЕДОСТАВЛЯЮТ ИНФОРМАЦИЮ НЕПОСРЕДСТВЕННО ИЗ ОРГАНИЗАЦИИ ПОДДЕРЖКИ МАЙКРОСОФТ. СВЕДЕНИЯ, СОДЕРЖАЩИЕСЯ В ЭТОМ ДОКУМЕНТЕ, СОЗДАЮТСЯ В ОТВЕТ НА НОВЫЕ ИЛИ УНИКАЛЬНЫЕ ТЕМЫ ИЛИ ПРЕДНАЗНАЧЕНЫ ДЛЯ ДОПОЛНЕНИЯ ДРУГИХ СВЕДЕНИЙ БАЗЫ ЗНАНИЙ.

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

КОРПОРАЦИЯ МАЙКРОСОФТ И/ИЛИ ЕЕ ПОСТАВЩИКИ НЕ ПРЕДСТАВЛЯЮТ НИКАКИХ ГАРАНТИЙ О ПРИГОДНОСТИ, НАДЕЖНОСТИ ИЛИ ТОЧНОСТИ ИНФОРМАЦИИ, СОДЕРЖАЩЕЙСЯ В ДОКУМЕНТАХ И СВЯЗАННЫХ С НИМИ РИСУНКАХ, ОПУБЛИКОВАННЫХ НА ЭТОМ ВЕБ-САЙТЕ (МАТЕРИАЛЫ) ДЛЯ ЛЮБЫХ ЦЕЛЕЙ. МАТЕРИАЛЫ МОГУТ ВКЛЮЧАТЬ ТЕХНИЧЕСКИЕ НЕТОЧНОСТИ ИЛИ ТИПОГРАФИЧЕСКИЕ ОШИБКИ И МОГУТ БЫТЬ ПЕРЕСМОТРЕНЫ В ЛЮБОЕ ВРЕМЯ БЕЗ УВЕДОМЛЕНИЯ.

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