    C++ support with the Android NDK
    ================================

    The Android platform provides a very minimal C++ runtime support library
    (/system/lib/libstdc++) and corresponding headers for it in the NDK.

    I. C++ Exceptions support:
    --------------------------

    The NDK toolchain supports C++ exceptions, since NDK r5, however all C++
    sources are compiled with -fno-exceptions support by default, for
    compatibility reasons with previous releases.

    To enable it, use the '-fexceptions' C++ compiler flag. This can be done
    by adding the following to every module definition in your Android.mk:

        LOCAL_CPPFLAGS += -fexceptions

    More simply, add a single line to your Application.mk, the setting will
    automatically apply to all your project's NDK modules:

        APP_CPPFLAGS += -fexceptions

    NOTE: The obsolete "arm-eabi-4.4.0" toolchain provided for backwards
          compatibility with this NDK does not support exceptions!

    II. RTTI support:
    ------------------

    Similarly, the NDK toolchain supports C++ RTTI (RunTime Type Information)
    since NDK r5, but all C++ sources are built with -fno-rtti by default for
    compatibility reasons. To enable it, add the following to your module
    declarations:

        LOCAL_CPPFLAGS += -frtti

    Or more simply to your Application.mk:

        APP_CPPFLAGS += -frtti

    NOTE: The obsolete "arm-eabi-4.4.0" toolchain provided for backwards
          compatibility with this NDK does not support RTTI!

    III. Selecting the C++ Standard Library Implementation:
    -------------------------------------------------------

    By default, the headers and libraries for the minimal C++ runtime system
    library (/system/lib/libstdc++.so) are used when building C++ sources.

    You can however select a different implementation by setting the variable
    APP_STL to something else in your Application.mk, for example:

      APP_STL := stlport_static

    To select the static STLport implementation provided with this NDK.
    Value APP_STL values are the following:

       system              -> Use the default minimal C++ runtime library.
       stlport_static      -> Use STLport built as a static library.
       stlport_shared      -> Use STLport built as a shared library.
       gnustl_static       -> Use GNU libstdc++ as a static library.

    WARNING: IMPORTANT CAVEAT

         AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
         AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
         MODULES THAT USE IT.

         IF YOU NEED THESE, PLEASE USE "gnustl_static".

    WARNING: END OF IMPORTANT CAVEAT

      "stlport_shared" is preferred if you have several shared libraries in your
      project that use the C++ STL, because it avoids duplication of functions
      and more importantly of global variables (e.g. std::cout) in each one of
      them, which can have surprising results.

      On the other hand, you will have to load it explicitly when starting your
      application, as in the following example:

         static {
             System.loadLibrary("stlport_shared");
             System.loadLibrary("foo");
             System.loadLibrary("bar");
         }

      Where both "libfoo.so" and "libbar.so" depend on "libstlport_shared.so".

      Note that the shared library's name if "libstlport_shared.so" to avoid
      naming conflicts with certain Android system images which include a
      system-level libstlport.so (which happens to not be ABI-stable and
      cannot be used from NDK-generated machine code).

      "stlport_static" is preferred if you have only one shared library in your
      project: only the STL functions and variables you actually need will be
      linked to your machine code, reducing its code size, and you won't need
      to load the dynamic stlport_shared at start-up.

      "gnustl_static" is preferred (and required) if you need C++ Exceptions
      and RTTI support at the moment.

    IV. STLport-specific issues:
    ----------------------------

    This NDK provides prebuilt static and shared libraries for STLport,
    but you can force it to be rebuilt from sources by defining the following
    in your environment or your Application.mk before building:

        STLPORT_FORCE_REBUILD := true

    STLport is licensed under a BSD-style open-source license. See
    sources/cxx-stl/stlport/README for more details about the library.

    V. Future Plans:
    ----------------

      - Make STLport compatible with C++ exceptions and RTTI
      - Shared GNU libstdc++ support
      - uSTL support?