Eclipse CDT indexer does not know C++11 containers

十年热恋 提交于 2019-11-26 01:58:01

问题


I configured a C++11 project in Eclipse CDT to use gcc-4.7. It is not the default compiler on my system, which does not support C++11. In order for compilation to work, I need to pass the flag -std=c++11 and also include the following header path: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

Whenever I use C++11 container types like std::unordered_set or std::unordered_map, the CDT indexer complains: Symbol unordered_set could not be resolved. How can I tell the indexer to resolve these symbols correctly?

This is how I have configured my indexer:

\"enter

As far as I understand the settings, the indexer is supposed to use the compiler settings from the currently active build configuration. Compilation works fine, so why doesn\'t indexing, too?


回答1:


As described in this forum post:

http://www.eclipse.org/forums/index.php/mv/msg/282618/

  • right-click the project and go to "Properties" C/C++ General -> Paths and Symbols -> Symbols -> GNU C++.
  • Click "Add..." and paste __GXX_EXPERIMENTAL_CXX0X__ into "Name" and leave "Value" blank. Hit Apply, do whatever it asks you to do, then hit OK.



回答2:


Setting up **__GXX_EXPERIMENTAL_CXX0X__** does not help in my case (Jul 2014, Eclipse Kepler 20130919, Ubuntu 12.04).

To fix C++11 syntax highlighting go to:

Project Properties --> C/C++ General --> Paths and Symbols --> Symbols --> GNU C++

and overwrite the symbol (i.e. add new symbol):

__cplusplus

with value

201103L

UPDATED: If you use newer version of Eclispe (as of 2016) and still experience the same problem, try value (as pointed by jose.diego):

201402L

Make sure that indexer is enabled in Project settings (C/C++ general --> Indexer)

Then reindex (Project --> C/C++ Index --> Rebuild)

if the problem still persist reindex once again. It should work now.




回答3:


I solved this problem recently after some lucky googling.

Click on your project and right-click->Properties

Select "C/C++ General -> Processor Include Paths, Macros etc..."

Select the "Providers" tab

Deselect everything except "CDT User Setting Entries" and "CDT GCC Built-in Compiler Settings"

Click on "CDT GCC Built-in Compiler Settings"

Deselect "Use global provider shared between projects"

Edit the box at the bottom labeled "Command to get compiler specs"

Insert into the command -std=c++11 so it looks something like this:

${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}"

Click Apply and Okay.

That worked for me. You probably need to re-index the project.




回答4:


Or go to:

  • C/C++ Build->Discovery Options->GCC C++ Compiler

  • add your flags to the Compiler invocation arguments. like -std=c++11 -m32

  • Clear discovered entrys now: click on Clear

  • rebuild the project

After that ALL symbols will be updated with correct values and the indexer should work as intended




回答5:


The workaround for me, with a project that uses an external builder, was to define the symbol:

__cplusplus

with the value:

201403

in the project's: Paths and Symbols -> Symbols/GNU C++.

This worked in eclipse Kepler CDT Version: 8.3.0.201402142303.




回答6:


See this guide:

  1. C/C++ Build->Settings->GCC C++ Compiler->Dialect
  2. Choose "ISO C++11 (-std=c++0x)" in "language standard"

  3. Apply and OK
  4. Rebuild the project and it works:)



回答7:


The follows works in Eclipse C/C++ Oxygen.2 with gcc-5.5.0

Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

Don't pick up anything in the Language standard dropdown list.




回答8:


The following configuration helps me to fix the issue indicated in the original question.

Environment: Eclipse(Oxygen.3a Release (4.7.3a)), Cygwin64. In case you have a different version of Cygwin, you can find similar directories as follows.

Step 1: Make sure you have the following two directories:

   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++

If you don't see the above two directories, please launch your Cygwin setup program and install gcc-core, gcc-g++ and libgcc1.

Step 2: Copy the directory C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include to C:\cygwin64\usr if you don't see above two include directories.

Step 3: Go to Project Property->C/C++ General->Paths and Symbols Make sure you can see the following two paths are listed

   C:\cygwin64\usr\include
   C:\cygwin64\usr\include\c++

Step 4: Property->C/C++ Build/Settings/ Choose Cygwin PE Parser

Step 5: Property->C/C++ Build/Tool Chain Editor Choose Cygwin GCC

Step 6: Property->C/C++ General/Indexer Choose Enable indexer

Step 7: Project->C/C++ Index->Rebuild

Now your eclipse should be able to see the C++11 types.



来源:https://stackoverflow.com/questions/17131744/eclipse-cdt-indexer-does-not-know-c11-containers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!