Home » Android » android – Setting up C++11 (std::thread) for NDK with ADT/Eclipse

android – Setting up C++11 (std::thread) for NDK with ADT/Eclipse

Posted by: admin June 15, 2020 Leave a comment


I have been trying to use C++11. I am developing an android project and i want to use std::mutex. Along with OpenCV
But no matter what I do, I just cant seem to fix the Type 'mutex' could not be resolved

I have tried following the tutorials i found on SO and other places.

  1. ADT v22.3.0-887826
  2. Installed C/C++ compilers (CDT)

Following so many tutorials, it has become a real mess now. So I will explain my current settings

  • Project > Properties > C/C++ Build > Tool Chain Editor
    • Current Tool Chain is “Cross GCC”
    • Current Builder is “Android Builder”
  • Project > Properties > C/C++ Build > Discovery Options

    • Compiler invocation command is “gcc”
    • Compilter Invocation argments are -E -P -v -dD “${plugin_state_location}/specs.c -std=c++11”
  • Project > C/C++ General > Paths and Symbols > # Symbols tab

    • Symbol = __cplusplus and Value = 1

In my Application.mk file I have the following

APP_STL := gnustl_static
APP_USE_CPP0X := true
APP_CPPFLAGS := -std=c++11 -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8

I tried to change the cplusplus symbol’s value to 201103L
with an empty value

But nothing seems to work, What am I doing wrong??

Any help is appreciated!

How to&Answers:

Support for std::thread is a bit special. The issue is addressed, for example, in this article by Binglong. The article is really short, but it can be summarized in one sentence:

You cannot use the (default) gcc 4.6 toolchain if you want to #include <thread> or #include <mutex>.

So, please add NDK_TOOLCHAIN_VERSION=4.8 or NDK_TOOLCHAIN_VERSION=clang to your Application.mk.

For ADT to rebuild its Index correctly, see Android NDK build, Method could not be resolved or Eclipse compiles successfully but still gives semantic errors.


In Android.mk add LOCAL_CPPFLAGS := -std=c++11 -D __cplusplus=201103L then rebuild your project (for reconfiguring compiler). After rebuilding, your project automatically adds needed stl path into Path and Symbols


If you upgrade the NDK or install a fresh version of Android Studio (2.1 at time of writing) and have Android Studio download the NDK for you you will get revision 12 – which has a lot of the std:: defines not defined in \ndk-bundle\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include\bits\c++config.h – ones relevant for threading being such as _GLIBCXX_HAS_GTHREADS which hides the thread class in “thread” for example.

It says that after revision 10e that gcc is deprecated. And with this all the defines as mentioned – which thoroughly buggered our thread dependant JNI code.

Clang as suggested in other posts is not a solution for us as it amongst other things seems not to support thead_local for example.
The solution is to revert back to revision 10e – which you can find at:


Extract the package and copy into the sdk/ndk-bundle directory – make sure you delete the original revision 12 first.