Внутренняя ошибка компилятора visual studio
При компиляции на платформе x64 я получаю следующую ошибку:
Если я изменяю настройки на файл препроцессора (Да), я не получаю никакой ошибки.
О моей среде: обновление Microsoft Visual Studio 2005 до 2010
Я встречал эту ошибку много раз в VC++. Сделайте следующие шаги. Они всегда помогали мне с этим вопросом:
- Посмотрите на точное местоположение, на которое указывает ошибка компилятора.
- Найдите любые внешние типы или классы, используемые там в этом месте.
- Измените порядок «include path» этих файлов, найденных на шаге 2, и перестройте решение.
- Надеюсь что поможет .
Я получаю ту же ошибку с VC2012. Установка свойств проекта Оптимизация на Отключено (/ Od) решила проблему.
У меня была эта проблема с VS2015 при сборке локально в Windows.
Чтобы решить эту проблему, я удалил свою папку сборки (выходной каталог, как показано в Свойства/Общие) и перестроил проект.
Это всегда помогает, когда во время сборки происходят странные вещи.
В моем решении я удалил выходной файл DLL проекта, и я сделал пересборка проекта.
Я получил эту ошибку с помощью библиотеки повышения с VS2017. Очистка решения и восстановление его, решили проблему.
В моем случае было использование статической лямбда-функции с аргументом QStringList . Если я прокомментировал регионы, где использовалась переменная QStringList , скомпилированный файл, в противном случае компилятор сообщил об ошибке C1001. Изменение лямбда-функции на нестатическое решило проблему (очевидно, другие варианты могли бы использовать глобальную функцию в анонимном пространстве имен или статический закрытый метод класса).
Я столкнулся с той же ошибкой и потратил немало времени на поиски этой проблемы. Наконец, я обнаружил, что та функция, на которую указывает ошибка, имеет бесконечный цикл while. Исправлено, и ошибка исчезла.
У меня также была эта проблема при обновлении с VS2008 до VS2010.
Может быть, есть похожий патч для VS2005?
Я получил это с кодом во время рефакторинга с недостаточной тщательностью (и с шаблонами, именно в этом случае ICE вместо обычной ошибки времени компиляции)
Обновление : оказывается, причина в том, что мой жесткий диск выходит из строя. После того, как другие симптомы побудили меня запустить chkdsk, я обнаружил, что большинство поврежденных секторов были заменены на .obj, .pdb и другие файлы, сгенерированные компилятором.
Я обновился до версии Visual Studio 2015 Update 1, но теперь я получаю следующую ошибку, когда когда-либо компилирую конфигурацию выпуска для 64-битного, все работает для 32-битных и/или отладочных сборников.
Ошибка возникает не для каждого из моих проектов, а для некоторых.
Упрощение указанного местоположения на самом деле невозможно, место, где происходит сбой компилятора, обычно является просто простой функцией одной строки, также изменение этого кода приводит к той же ошибке в другом месте. Насколько я могу предположить, он должен что-то сделать с оптимизацией и вложением. Но изменение параметров оптимизации тоже не помогло.
Может ли кто-нибудь указать мне, как найти реальный проблемный код или некоторые параметры компилятора, чтобы избежать этой ошибки?
Я не хотел бы думать, что обновление не работает.
Мы столкнулись с C1001 в одном из наших проектов после обновления до обновления MSVC 2015.
Через пробную ошибку мы идентифицировали свойство ClCompile/AssemblerOutput как виновника в нашем случае. Удаление этого свойства больше не вызвало C1001
Обновление 6 апреля 2016 года: я попытался создать этот же проект с обновлением MSVC 2015 Update 2 без свойства ClCompile/AssemblerOutput , и я больше не получаю C1001 при создании этого проекта. Я думаю, что обновление 2 исправлено.
Попробуйте настроить при оптимизации проекта на Disabled (/Od), это может решить проблему.
Я надеюсь, что мой ответ будет поддерживать вашу проблему.
Я также столкнулся с этой проблемой, пока мы конвертировали нашу кодовую базу компании с VC10 на VC14. В нашем случае проблема возникла, когда таргетинг на x64 и SEH ( /EHa ) был включен одновременно с выходом Ассемблера. Ошибка произошла в нашем случае, когда в скомпилированном коде был вызван оператор ввода потока (т.е. std::cout::operator<< ).
В нашем случае динамическая привязка ЭЛТ вместо статической привязки (т.е. /MT вместо /MD ), по-видимому, обойти проблему без отключения выхода ассемблера. Это не первая проблема, которую я нашел со статически связанным CRT (например, это также вызвало отсутствующие курсоры при изменении размеров окон CPane в MFC).
Изменить: VS2015 Update 2, согласно Micrsoft, исправил эту проблему. Он протестирован как исправленный на нашей кодовой базе.
Я постоянно сталкиваюсь с внутренней ошибкой компилятора при попытке переключиться с MSVC6 на MSVC 2008. После долгой работы по комментированию различных частей программы я отследил ошибку до двух строк кода в двух разных файлах CPP. Оба этих файла CPP успешно компилируются, но каким-то образом влияют на то, проявляется ли ошибка в других файлах.
Обе эти строки включают создание нескольких сложных вложенных шаблонов. Они также кажутся единственными местами в приложении, которые используют абстрактный класс в качестве одного из параметров шаблона. Тем не менее, я далеко не уверен, что проблема связана либо с абстрактными классами, либо с шаблонами, это просто самое очевидное, что я заметил. Я даже не могу быть уверен, что эти строки вообще значимы. Вот как они выглядят:
Итак, у нас есть SObjDict, класс шаблонного словаря, SIDataSource, абстрактный интерфейс, а параметр является указателем на статическую функцию-член RWCString.
Я немного поигрался с кодом и иногда могу получить ошибку при переходе из одного файла CPP в другой (например, я изменил несколько объявлений шаблонов с использования class на typename ), но я не могу найти для этого ни рифмы, ни повода.
Я не понимаю, как дальше отлаживать эту проблему. Точный вывод ошибки компилятора (с измененным именем исходного файла) приведен ниже. Нигде в Интернете об этом не упоминается. Я очень отчаянно нуждаюсь в советах, как действовать дальше. Я не ожидаю, что кто-то скажет: «О, вам просто нужно выполнить XYZ», но я был бы очень признателен за указание на то, как отлаживать такого рода проблемы.
Мне несколько плохо, когда я отвечаю на свой вопрос и принимаю его, но я думаю, что это правильно . Я решил свою проблему, по крайней мере, временно. Кажется, уловка заключается в отключении предварительно скомпилированных заголовков. Я понятия не имею, почему это решает проблему, и это очень прискорбно, поскольку время сборки для затронутого проекта уменьшилось с менее 30 секунд до почти 5 минут, но, по крайней мере, я могу продвигаться вперед .. .Если кто-нибудь предложит более постоянное решение, я буду более чем счастлив отметить его ответ как принятый.
Разумно предположить, что p2symtab.c является (частью) кода таблицы символов. Это сразу объяснило бы, как это вызвало обновление; этот код был переписан. (Помните предупреждения VC6 о длине 255 символов?)
В этом случае в таблице символов нет новой записи, поэтому, скорее всего, поиск в таблице символов спектрально не работает. Было бы интересно посмотреть, влияет ли контекст, в котором происходит поиск имени, на результат. Например, что произойдет, если вы измените код на
Это заставит создать другую запись таблицы символов для SObjDict_RWCString_SIDataSource . Эта запись является своего рода символической ссылкой на создание экземпляра шаблона. Новое имя можно (и нужно) искать самостоятельно.
Начните разбивать его на более мелкие части. Мое первое предположение - указатель на статическую функцию будет проблемой. Можете ли вы создать фиктивный класс без шаблона с тем же параметром в конструкторе? Компилируется ли он, если в шаблоне не используется абстрактный класс?
Похоже, я отправляю вас в неверном направлении, в 2008 году следующие компилируются нормально:
Однако принцип остается: удаляйте / заменяйте сложные элементы до тех пор, пока у вас не будет код, который скомпилируется, и вы не узнаете, что вызывает проблему.
Фатальная ошибка C1001: в компиляторе произошла внутренняя ошибка. 1> (файл компилятора 'f: \ dd \ vctools \ compiler \ utc \ src \ p2 \ p2symtab.c
Я также наблюдал ту же ошибку, когда пытаюсь построить свой код vs 2005 для vs 2008. Но это происходит до тех пор, пока я не установил пакет обновления VS 2008 .
Вы установили пакет обновления . я думаю, это решит вашу проблему .
Обычно это происходит при создании экземпляра шаблона. К сожалению, это может быть вызвано многими причинами, но в 99% случаев ваш код незаметно вызывает неопределенное поведение.
> e:\program files\microsoft visual studio 8\vc\include\xtree(365) : fatal error C1001: An internal error has occurred in the compiler.
> (compiler file 'msc1.cpp', line 1392)
> To work around this problem, try simplifying or changing the program near the locations listed above.
> Please choose the Technical Support command on the Visual C++
> Help menu, or open the Technical Support help file for more information
001
да ниче бывало сотню раз =) у меня спасало выход -> запуск -> ребилд
Это бывает, когда какой-нибудь некорректный код написан.
VS2003 выкидывает похожий код нет сответствия скобок:
try < . try < . >catch < . >catch
У меня бывало частенько, во всех случаях был написан некорректный код в редакторе, а компилятор не мог правильно распазнать и обработать ошибку.
Так что анализируй свой код более пристально.
З.Ы.: такое у меня бывало только с MS VS
З.Ы.: да это только в том случае, если не помогает: удаление всех бнариков и объектного кода + перезагруз компа + ребилд все
001
Всего-то. Во пол часа назад, делал GuiChan в SCU - словил ICO. Лечилось отказом от SCU. По идее надо пошаманить код, использующий то место, откуда мы падаем.
Можно патчи на Студию воткнуть еще.
001
Это может быть что угодно, но скорей всего, это твоя ошибка.
Если я компилирую свой проект с Enable Minimal Rebuild - стопроцентно IntCompErr.
Без минимального ребилда всё Ок.
Код heavy templated.
cppguru
Сперва это ошибка компилятора, если он не может обработать исходник, а потом уже - программиста.
001
Гы. Это полнейший ацтой. У меня похлеще было - писал про ошибку в своих (. ) сорцах. Что-то типа "интернал эррор ин Е:\Микрософт проджектс\студия 7.1\срц\бла-бла\мемори.цпп, строка 120".
Джо
>Сперва это ошибка компилятора, если он не может обработать исходник, а потом уже - программиста.
Не надо вот диалектики, плиз. И по стандарту, компилятор вообще не обязан никак распознавать ошибки.
В основном я видел, что эта ошибка выдаётся на некорректном коде. Просто это - catch all error.
V0id
Ты про ассерты слыхал?
cppguru
Слыхал. Также слыхал, что их юзают с ифдеф дебаг. Не похоже это на ассерт было ;)
V0id
>Также слыхал, что их юзают с ифдеф дебаг.
Не только.
>Не похоже это на ассерт было ;)
Почему?
001
И чего офигеть? Компиляторы тоже люди пишут, и живут они на планете Земля.
001
В 90% случаев ошибка вызванна странной нестандартной синтаксической конструкцией программиста, которая неправильная, но настолько необычна, что у компилятора для неё нет слов :) И только оставшиеся 10% - это ошибки уже компилятора.
>И Что делать?
To work around this problem, try simplifying or changing the program near the locations listed above.
Читайте также: