How to make CDT/Eclipse work with C++11 threads?

后端 未结 3 2429
予麋鹿
予麋鹿 2021-02-20 01:15

I tried to test an example of C++11 threads in Eclipse. But I got this message when running the program:

terminate called after throwing an instance of \'

相关标签:
3条回答
  • 2021-02-20 01:49
    1. Go to Project > Properties > C/C++ General > Preprocessor include paths, etc > Providers > CDT GCC Builtin Compiler Settings and append -std=c++11 to the compiler specs.

      You can also do this for all projects going to Window > Preferences > C/C++ > Build > Settings > Discovery and append -std=c++11 to the CDT GCC Builtin Compiler Settings specs.

       ${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"
      
    2. Project Properties > C/C++ Build > Settings > Tool Settings > GCC C++ Compiler > Miscellaneous > Other flags, add -pthread -std=c++11 -Wl,--no-as-needed:

       -c -fmessage-length=0 -pthread -std=c++11 -Wl,--no-as-needed
      
    3. Project Properties > C/C++ Build > Settings > Tool Settings > GCC C++ Linker > Miscellaneous > Linker flags, add -pthread -std=c++11 -Wl,--no-as-needed

       -pthread -std=c++11 -Wl,--no-as-needed
      
    0 讨论(0)
  • 2021-02-20 01:51

    To work C++11 std::thread in Eclipse, one needs to give -pthread option while compiling. However that's not enough. In my Ubuntu 14.04, with Eclipse Kepler and g++4.9 below makes it work:

    1. Right click on Project and select 'Properties'
    2. Go to 'C/C++ Build' > 'Settings' > (tab) 'Tool Settings'
    3. First select 'Cross G++ Compiler' > 'Miscellaneous' > 'Other flags';
      and add -pthread after -std=c++11
    4. Second select 'Cross G++ Linker' > 'Libraries';
      and add pthread (which is equivalent to command line -lpthread)

    Finally re-compile the project; the error should go.

    Also remember that if you use, std::thread then its object must be join() somewhere. Else you may get below runtime error:

    terminate called without an active exception

    0 讨论(0)
  • 2021-02-20 01:57

    The problem was solved by the comment of Jonathan Wakely.

    I added -pthread to C/C++ Build -> Settings -> Tool Settings -> Cross G++ **Linker** -> Miscellaneous -> Other Flags and the program worked correctly.

    Thank you Jonathan.

    0 讨论(0)
提交回复
热议问题