No c++11 support for Android
-
I'm building an Android app in qt and need c++11 support for a 3rd party library.
The app builds fine with my desktop kit (MinGW 5.3.0) but I get multiple errors for my Android kit, like:
'to_string' is not a member of 'std'
'strtof' ist not a member of 'std'
etc.My android kit (auto detected):
Android for armeabi-v7a (GCC 4.9, Qt 5.10.0 for Android armv7)
Compiler: Android GCC (C, arm-4.9)
Compiler: Android GCC (c++, arm-4.9)NDK Version: r10e
I've already tried to add these flags to the pro file:
CONFIG += c++11 QMAKE_CXXFLAGS += -std=c++11 QMAKE_LFLAGS += -std=c++11
The common solution seems to be adding
APP_STL:=c++_static
to your Android.mk file, but as far as I know that doesn't exist when using qt.
These are my CXXFLAGS from the build directory make file:
CXXFLAGS = -D__ANDROID_API__=16 --sysroot=C:\Android\NDK\android-ndk-r10e/platforms/android-16/arch-arm/ -isystem C:\Android\NDK\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem C:\Android\NDK\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -fstack-protector-strong -DANDROID -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-builtin-memmove -std=c++11 -g -g -marm -O0 **-std=gnu++11** -Wall -W -D_REENTRANT -fPIC $(DEFINES)
-
And with NDK r10e ?
See https://wiki.qt.io/Qt_for_Android_known_issues and http://doc.qt.io/qt-5/androidgs.html
-
Hi,
This stack overflow answer shows how to implement to_string as well as links to here which gives more details about string support in the NDK.
-
Use Linux workstation with complete GNU CPP compiler instead of castrated Windows MinGW - and you will get full C++11 support. I do that just like that exactly. It is much more comfortable develop and debug Android apps on Linux rather than on Windows. Cause Android itself is Linux by nature...
-
Does anyone have a real solution for this, not strings but the whole bunch? I don't know the details, but I have an app which I naively developed only with the Desktop kit and it should really work in Android. Do I have to spend a couple of days to refactor to C++98?
Library problems:
C:\Users\Eeli\Documents\Kaiku\panelsdata.cpp:149: error: 'class std::initializer_list<std::vector<_WALL_PANEL> >' has no member named 'erase'
But also non-library:
//code for (WALL_PANEL& p: panels) { p.Zpos++;
C:\Users\Eeli\Documents\Kaiku\panelsdata.cpp:158: error: 'const class std::vector<_WALL_PANEL>' has no member named 'Zpos' p.Zpos++; ^
And about 10 others in just 1 file. This all compiles and runs fine with Creator 4.7.1 and Qt 5.11.2 with the default Desktop Kit on Windows.
So, really, no GCC 5.3 or C++11 for Android?
-
Here's a possible hack around it: https://forum.qt.io/topic/38949/stl-on-android
Another possibility: https://github.com/nlohmann/json/issues/219#issuecomment-221686166
Or wait for Qt 5.12 which switches to clang on Android, and supports much more modern c++.
-
No need for another thread, I got it working. Here are the android related package versions which finally made it to work in case someone else has troubles:
The latest JDK and NDK didn't work.
I hope they fix the name strings for the next beta. It's annoying and confusing to have "GCC" everywhere even though it really uses clang.