Поддержка Eclipse CDT С++ 11/С++ 0x
Eclipse 3.7.1
CDT 1.4.1
GCC 4.6.2
Это пример фрагмента кода С++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
Редактор Eclipse жалуется:
Function 'unique_ptr' could not be resolved
Компиляция Makefile отлично работает. Как заставить Eclipse перестать жаловаться на подобные ошибки?
Ответы
Ответ 1
Я нашел эту статью на форуме Eclipse, просто выполнил эти шаги и работает для меня. Я использую Eclipse Indigo 20110615-0604 для Windows с настройкой Cygwin.
- Создайте новый проект на С++
- Параметры по умолчанию для всех
- После создания щелкните правой кнопкой мыши проект и перейдите в "Свойства"
- C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Поместите
-std=c++0x
(или для более новой версии компилятора -std=c++11
в конце.... вместо компилятора GCC С++ У меня также есть компилятор Cygwin
- C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и вставьте
__GXX_EXPERIMENTAL_CXX0X__
(убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя", и оставьте поле "Значение" пустым.
- Нажмите "Применить", сделайте все, что вы попросите, затем нажмите "ОК".
В этом разделе также есть описание этого в FAQ Eclipse: Eclipse FAQ/С++ 11 Особенности.
Настройка изображения Eclipse
Ответ 2
Инструкция для Eclipse CDT 4.4 Luna и 4.5 Mars
Сначала, перед созданием проекта, настройте синтаксический синтаксический анализатор Eclipse:
Window
→ Preferences
→ C/C++
→ Build
→ Settings
→ Discovery
→ CDT GCC Build-in Compiler Settings
в текстовом поле под названием Command to get compiler specs
append -std=c++11
Теперь вы можете создать проект, настройка зависит от того, какой проект вы создали:
Для проекта, созданного как: Файл → Создать → Проект → C/С++ → Проект С++
Щелкните правой кнопкой мыши на созданном проекте и откройте
Properties
→ C/C++ Build
→ Settings
→ Tool Settings
→ GCC C++ Compiler
→ Dialect
Поместите -std=c++11
в текстовое поле под названием other dialect flags
или выберите ISO C++11
из раскрывающегося списка Language standard
.
Для проекта CMake
Сгенерировать файлы проекта eclipse (внутри вашего проекта)
mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
Затем импортируйте сгенерированную директорию для затмения в качестве стандартного проекта eclipse. Щелкните правой кнопкой мыши проект и откройте
Properties
→ C/C++ General
→ Preprocessor Include Paths, Marcos etc.
→ Providers
включить CDT GCC Build-in Compiler Settings
и переместить его выше Contributed PathEntry Containers
(Это важно)
Последний общий шаг
перекомпилируйте, восстановите Project
→ C/C++ Index
и перезапустите Eclipse.
Ответ 3
Обновление 2016:
По gcc 6 (changes), диалект С++ по умолчанию - С++ 14. Это означает, что, если вам явно не нужен более новый или более старый диалект, чем больше, вам больше не нужно ничего делать с eclipse.
Для Луны и Марса
Этот раздел wiki сообщества включает ответ Trismegistos;
1. Перед созданием проекта настройте синтаксический синтаксический анализатор Eclipse:
Окно → Настройки → C/С++ → Сборка → Настройки → Обнаружение → Настройки компилятора встроенного CDT GCC
в текстовом поле "Команда" для получения спецификаций компилятора append -std=c++14
2. Создание проекта, настройка зависит от того, какой проект вы создали:
Для проекта, созданного как: Файл → Создать → Проект → C/С++ → Проект С++
Щелкните правой кнопкой мыши на созданном проекте и откройте
Свойства → C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Диалект
Поместите -std=c++14
в текстовое поле с надписью других диалектов диалектов или выберите ISO С++ 11 из раскрывающегося списка Язык.
Теперь есть новый способ решить эту проблему без взлома GXX_EXPERIMENTAL.
Для самых последних версий: (В настоящее время Juno и Kepler Luna):
В новых версиях Juno настройки расположены в Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.
Старые версии 2012/2013:
-
В разделе C/С++ Build (в настройках проекта) найдите Препроцессор Include и перейдите на вкладку Провайдеры. Отмените выбор всех, кроме настроек компилятора CDT GCC. Затем отмените ссылку на настройки параметров.... Добавьте параметр -std = С++ 11 в текстовое поле Command, чтобы получить спецификации компилятора.
-
Перейдите к путям и символам. В разделе "Символы" нажмите восстановить значения по умолчанию, а затем примените.
Примечания:
Eclipse придирчив к применению, вам нужно делать это каждый раз, когда вы покидаете вкладку настроек.
[Самореклама]: Я написал свои более подробные инструкции на основе вышеизложенного.
http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Благодаря пользователю Nobody
в fooobar.com/questions/33816/...
Ответ 4
Для последнего (Juno) eclipse cdt для меня работало, не нужно объявлять __GXX_EXPERIMENTAL_CXX0X__
для себя. Это работает для индексатора CDT и как параметр для компилятора:
"название вашего проекта" → правый клик → свойства:
C/С++ Общие → Препроцессор Включить пути, Макросы и т.д. → перейти на вкладку с именем "Провайдеры":
-
для "Конфигурация" выберите "Release" (а затем "debug" )
-
отключите всех поставщиков и просто выберите "Встроенные настройки компилятора CDT GCC"
-
снимите флажок "Разделять записи настроек между проектами (глобальный поставщик)"
-
в команде "Command" для получения спецификаций компилятора: "добавить" -std = С++ 11 "без кавычек (может также работать с кавычками)
-
нажмите применить и закрыть параметры
-
перестроить индекс
Теперь все связанные с С++ 11 файлы должны быть правильно исправлены индексом.
win7 x64, последнее официальное затмение с cdt
mingw-w64 gcc 4.7.2 из проекта mingwbuilds на sourceforge
Ответ 5
У меня была такая же проблема на моем Eclipse Juno. Эти шаги решили проблему:
- Перейдите к
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.
- Добавьте символ: __ cplusplus со значением 201103L
Ответ 6
Для Eclipse CDT Kepler, что сработало для меня, чтобы избавиться от неразрешенного символа std:: thread:
-
Перейдите в раздел Настройки → C/С++ → Build- > Settings
-
Выберите вкладку "Открытие"
-
Выберите настройки встроенного компилятора CDT GCC [Shared]
-
Добавьте thestst = С++ 11 в поле "Команда для получения спецификации компилятора:", например:
${COMMAND} -E -P -v -dD -std = С++ 11 ${INPUTS}
- Ok и перестроить индекс для проекта.
Добавление -std = С++ 11 для проекта Properties/C/С++ Build- > Settings- > Tool Settings- > GCC С++ Compiler- > Miscellaneous- > Других флагов для Kepler было недостаточно, однако этого было достаточно для более старые версии, такие как Helios.
Ответ 7
Я еще не могу прокомментировать, поэтому пишу собственный ответ:
Он связан с __GXX_EXPERIMENTAL_CXX0X__
, и он действителен для Eclipse Juno и CDT 8.x.
Некоторые части этого ответа уже рассмотрены в других ответах, но я хочу, чтобы он был последовательным.
Чтобы сделать возможным создание с использованием stdС++ 11, нужно добавить определенный флаг для компилятора. Вы можете сделать это через свойства проекта. Чтобы изменить свойства проекта RMB
и Project properties
или ALT + ENTER
. Затем C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Put -std = С++ 11 в конце строки, для GCC он будет выглядеть примерно так: -c -fmessage-length=0 -std=c++11
. Добавляя -stdС++ 11 компилятор флага (GCC) объявит __GXX_EXPERIMENTAL_CXX0X__
сам по себе.
На этом этапе вы можете построить проект, используя все доброту С++ 11.
Проблема в том, что Eclipse имеет собственный парсер для проверки ошибок - вот почему вы все еще получаете все неприятные ошибки в редакторе Eclipse, в то же время вы можете создавать и запускать проект без каких-либо проблем. Существует способ решить эту проблему, явно объявив флаг __GXX_EXPERIMENTAL_CXX0X__
для проекта, это можно сделать (как сказал Карстен Грейнер):
C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и минуйте __GXX_EXPERIMENTAL_CXX0X__
(убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя" и оставьте поле "Значение" пустым.
И теперь дополнительная роль, которую я хотел бы освежить в комментарии к первому ответу, перейдите по ссылке:
C/С++ General → Preprocessor Include Path Macros и т.д. → Провайдеры и выберите CDT Managed Build Setting Entries
, затем нажмите APPLY и вернитесь на вкладку "Вкладки", в разделе "GNU С++" теперь должны быть введены записи CDT Managed Build Setting, если внутри определено __GXX_EXPERIMENTAL_CXX0X__
если это → APPLY и перестроить индекс, вы должны быть в порядке.
Ответ 8
У меня было несколько проблем (Ubuntu 13.04 64-bit, g++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Многие вещи упоминаются выше, жаль повторять их, но, кроме того, у меня были проблемы с использованием
std::thread
как часть С++ 11 (добавление -pthread для компоновщика решает эту проблему). Во всяком случае, наконец, эти настройки работали нормально:
Проект → Свойства → C/С++ Build → Настройки → Разное. Добавьте
-std=c++11
для компиляторов GCC и g++. Нажмите "Применить" .
Для компоновщика, того же окна, Разное, флаги компоновщика, добавлено
-pthread
флаг. Параметры общей библиотеки, имя общего объекта, добавьте
-Wl,--no-as-needed
. Нажмите "Применить" .
C/С++ Общие → Пути и символы → Символы TAB, выбранный GNU С++, Добавьте
__GXX_EXPERIMENTAL_CXX0X__
(нет значения)
флаг. Нажмите "Применить" .
C/С++ Общие → Препроцессор Включить пути.. → Вкладка "Поставщики": проверьте
Встроенные настройки компилятора CDT GCC
и для команды "Command для получения спецификаций компилятора" добавьте
-std=c++11
флаг. Снимите флажок. Нажмите "Применить" .
CDT Managages Build Setting Entries, проверьте это тоже. Снимите отметку с двух других. Нажмите "Применить" .
Возвращаясь к вкладке "Записи", GNU С++ CDT Managages Build Setting Entries, вы должны увидеть свой добавленный
__GXX_EXPERIMENTAL_CXX0X__
запись.
Что это. При кодировании, набрав
std::
теперь может автоматически завершить класс потока, например, сборки должны работать нормально и не должно быть
std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted
во время выполнения.
Ответ 9
Я не знаю, является ли это только мне, решение с самым высоким рейтингом не работает для меня, моя версия eclipse - это обычная платформа eclipse, установленная с помощью sudo apt-get install eclipse в Ubuntu
Но я нашел решение, которое использует метод вместе как из решения с самым высоким рейтингом, так и во втором, что я сделал для его работы, описано ниже (обратите внимание, что другие шаги, такие как создание проекта на С++ и т.д., Для простоты игнорируются)
Как только вы создали проект С++
(1) C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и вставьте GXX_EXPERIMENTAL_CXX0X (убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя" и оставьте поле "Значение" пустым.
(2) В разделе C/С++ Build (в настройках проекта) найдите препроцессор Include Path и перейдите на вкладку "Провайдеры". Отмените выбор всех, кроме настроек компилятора CDT GCC. Затем отмените ссылку на настройки параметров.... Добавьте параметр -std = С++ 11 в текстовое поле Command, чтобы получить спецификации компилятора
После выполнения выше 2 и 2 только шагов он работает, затмение может разрешить unique_ptr, я не знаю, почему это решение работает, надеюсь, что оно может помочь людям.
Ответ 10
Для меня в Eclipse Neon я выполнил Trismegistos ответ здесь выше, YET Я также добавил дополнительный шаг:
- Перейти к проекту → Свойства → С++ Общие → Препроцессор Включить пути, Макросы и т.д. → Провайдеры → Встроенные параметры компилятора CDT Cross GCC, добавьте флаг "- std = С++ 11"
Нажмите и нажмите OK.
Приветствия,
Гай.
Ответ 11
- щелкните правой кнопкой мыши проект и перейдите к "Свойствам"
- C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Поместите -lm в конец текстового поля других флагов и нажмите OK.
Ответ 12
Ни для iPhone, ни для чистых версий не работает. Хак игнорируется, и требуемые параметры конфигурации отсутствуют. Без всякой видимой причины, сборка начала работать после того, как не работала и не давала никакой полезной причины. По крайней мере, из командной строки я получаю воспроизводимые результаты.
Ответ 13
Чтобы получить поддержку С++ 14 в Eclipse Luna, вы можете сделать следующие шаги:
- В
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
добавить "-std = С++ 14"
- В
C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
добавьте "-std = С++ 14"
Повторно запустите проект и, в конечном итоге, перезапустите Eclipse. Он должен работать как ожидалось.
Ответ 14
Eclipse C/С++ не распознает символ std::unique_ptr
, даже если вы включили заголовок памяти С++ 11 в свой файл.
Предполагая, что вы используете компилятор GNU С++, это то, что я сделал для исправления:
Project → Properties → C/С++ General → Preprocessor Include Paths → GNU С++ → записи пользователя CDT
-
Нажмите кнопку "Добавить..."
-
Выберите "Макропроцессорный макрос" в раскрывающемся меню
Name: __cplusplus Value: 201103L
-
Нажмите "Применить", а затем "ОК", чтобы вернуться к вашему проекту.
-
Затем перестройте свой индекс С++: Projects → C/С++ Index → Rebuild