Подтвердить что ты не робот

Eclipse 3.7.0 Indigo с CDT показывает множество ложных ошибок компиляции

Я обновил свой Ubuntu до 11.10, а затем Eclipse также был обновлен до 3.7.0 Indigo с CDT 8.0.1

Тогда возникает следующая проблема:

Eclipse errors

Я включил векторный заголовочный файл, но компилятор сказал, что Symbol 'vector' could not be resolved. Я также определил #define int Comparable, но Eclipse также сказал Symbol 'Comparable' could not be resolved и т.д....

Хотя происходит множество ошибок, компиляция была успешно завершена!

Я пытался использовать g++ для компиляции кода, у него не было проблем.

4b9b3361

Ответ 1

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

Проверьте каталог <workspace dir>\.metadata, чтобы получить представление о том, сколько Eclipse генерирует и хранит в вашей рабочей области. Каждый раз, когда вы добавляете плагин, обновляйте плагин, удаляйте плагин, который помещает и изменяет информацию в вашей рабочей области.

Доказательство того, что эта проблема обычно возникает сразу после обновления Eclipse. (В моем случае Индиго).

Самый простой способ исправить пылевое рабочее пространство - это использовать аргумент командной строки -clean для исполняемого файла eclipse.exe.

Документация справки Eclipse сообщает нам, что делает эта команда:

если установлено значение "true", любые кэшированные данные, используемые базой OSGi и Время работы eclipse будет очищено. Это очистит используемые кэши для хранения исправления зависимостей пакетов и реестре расширения eclipse данные. Использование этой опции заставит eclipse повторно инициализировать эти кэша.

Существует три способа использования аргумента командной строки -clean:

  • Отредактируйте файл eclipse.ini, расположенный в нем, и добавьте его в качестве первого аргумента в первой строке.
  • Отредактируйте ярлык, который вы используете для запуска Eclipse, и добавьте его в качестве первого аргумента.
  • Создайте пакет или оболочку script, которая вызывает исполняемый файл Eclipse с аргументом -clean.

Преимущество шага 3 заключается в том, что вы можете поддерживать script и использовать его каждый раз, когда хотите очистить рабочую область.

Эта страница разрешила мне эту проблему! Надеюсь, это поможет всем.

Ответ 2

Проблема заключается в том, что существует множество каталогов include, отсутствующих в перспективе индексатора.

Добавление следующего сработало для меня, но может зависеть от вашей конкретной установки, где они на самом деле существуют:

/usr/include/c++/4.6.1
/usr/include/                
/usr/include/c++             
/usr/include/c++/4.6         
/usr/include/x86_64-linux-gnu
/usr/include/asm-generic
/usr/include/c++/4.6.1/x86_64-linux-gnu/

Их можно установить в Project>Properties>C++ Include Paths

Предположительно, в будущем специализация платформы для CDT будет автоматически включаться. Я помню, что читал это где-то, но не могу предоставить ссылку.

Ответ 3

В свойствах проекта перейдите в C/С++ Build > Редактор цепочки инструментов, выберите "Только теги", совместимые с инструментами, и выберите "Linux GCC" и нажмите кнопку "Применить".

Теперь, если вы перейдете к C\С++ General > Paths and Symbols, вы увидите новый список включенных путей. Если вы перестроить индекс, сообщения об ошибках должны исчезнуть.

Ответ 4

Анализ кода вызывает это. Это не собственно компиляция кода, а просто выполнение некоторых статических проверок для быстрой обратной связи. К сожалению, я не знаю, как это исправить, я просто отключил его. Извините, что я на работе, поэтому у меня нет CDT передо мной, но я думаю, что это что-то вроде:

Window > Preferences > C++ General > Code Analysis

Перейдите туда и снимите все флажки, чтобы отключить его.

Ответ 5

Когда вы создаете проект на С++ (в моем случае из существующего кода), вы должны установить "Toolchain for Indexer Settings" для используемого вами компилятора ( "GNU Autotools Toolchains" в моем случае). После этого "Путь и символы" покажет правильный путь к включенным файлам вашего компилятора. Ошибки исчезнут. Этот параметр был полезен только при создании проекта, установка которого позже не помогла.

В версии indigo 3.7.2 (и может быть) ваши изменения могут быть эффективными после переиндексации. Eclipse попросит "переиндексировать". В более низких версиях могут потребоваться ручные переиндексирующие теги заголовков и т.д.

Ответ 6

Обновленная опция индекса для активной конфигурации сборки работает для меня,

также я удалил некоторые файлы из списка файлов, которые были проиндексированы вверх,

Ответ 7

Хорошо, вот что сработало для меня:

  • удалил путь к файлам заголовков, которые я создал из пути include

  • скомпилировал проект (очевидно, компилятор жалуется, поскольку ему не хватает пользовательских заголовков)

  • повторно ввел путь к файлам заголовков, которые я создал

  • снова скомпилировал проект - отлично работал

Я не могу объяснить случай: (

Ответ 8

Я отвечаю здесь, потому что это самый близкий вопрос к моей проблеме.

Я использовал интеграцию QT Eclipse с Helios (3.6.2) без серьезных проблем. Я использовал mingw 4.6.2, который я установил для c:\mingw. Я хотел перейти на Indigo, в котором исправлены некоторые незначительные проблемы, с которыми я столкнулся с CDT.

Однако под Indigo (3.7 SR2) Eclipse начал подчеркивать тривиальные функции как нерешенные, такие как:

function 'fprintf' could not be resolved
function 'memset' could not be resolved

хотя #include не был подчеркнут, может быть открыт и включен fprintf в заголовке. И хотя сам код скомпилирован.

Если бы я вернулся к Гелиосу, проблемы исчезли.

Я пробовал переиндексировать, но безрезультатно. Я проверил мои включенные пути, и они были:

c:\mingw\include
C:\MinGW\lib\gcc\mingw32\4.6.2\include

Сначала я только что включил первый, но не второй. Но затем я искал "неразрешенные включил", и stdio.h включал stdarg.h, который не был в основной включенной папке mingw, поэтому я добавил вторую. Но, тем не менее, printf не был разрешен, и больше не было "неразрешенных включений".

Я создал новый проект на С++ с одним классом. Я добавил stdio.h, пути выше и вызов fprintf. Это было подчеркнуто! Хотя другие вещи из stdio не были подчеркнуты.

Теперь я знал, что это не просто проблема Qt.

Я работал над этим некоторое время, прежде чем я прочитал нижний пост, предлагая удалить пути включения и компиляцию. Я не верил, что это сработает, но выстрелил. Удивительно, хотя компиляция не удалась, ошибка исчезла!

Тогда я снова взглянул на включенные пути. Они были обновлены на этапе компиляции следующим образом:

c:/mingw/lib/gcc/mingw32/4.6.2/include-fixed
c:/mingw/include
c:/mingw/lib/gcc/mingw32/4.6.2/include
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/backward
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/mingw32
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++

Они были отмечены как "встроенные" значения, которые я предполагаю, что они не были добавлены мной и могут быть обновлены при следующем запуске сборки.

Итак, я думаю, что урок есть, включая каждый отдельный путь include под mingw, даже если Eclipse не находит его неразрешенным.

Следующим шагом было поместить все эти пути в мой проект Qt. К сожалению, после этого остались нерешенные функции. Похоже, что это какая-то ошибка с путями Qt C/С++, которые отличаются от CDT C/С++, включая пути.