Closed malachib closed 8 months ago
std::experimental
isn't used if the standard library defines __cpp_lib_coroutine
, thus I suspect something is fishy with clang/libc++ in Android NDK...I downloaded the Android NDK 25 (I downloaded 25.2.9519653, which is slightly newer than yours, but that shouldn't matter), and searching the NDK I can only find the <experimental/coroutine> header:
❯ cd android-ndk-r25c
❯ find . -name "coroutine"
./toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/experimental/coroutine
./sources/cxx-stl/llvm-libc++/include/experimental/coroutine
The reason why is most likely because the Android NDK ships clang 14, but the libc++ standard library is older:
❯ cat toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__libcpp_version
11000
libc++ 11 indeed does not have the <coroutines>
include header, only <experimental/coroutines>
, so QCoro falls back to including that, which triggers the warning from clang.
I'll add the compile option to QCoro when building on Android....
Btw I also checked NDK 26, which ships libc++ 17 which does have full coroutine support, so QCoro should work there out of the box without any changes.
Your attention to detail is remarkable. Thank you!
Environment:
While compiling for Android, we get:
Which promotes from a warning to an error. Workaround is to specify in CMakeLists.txt
Which gets us going, but presumably Clang 15+ that will fail. However, I see PRs in this repo which are using Clang 17. So who knows. All I know is my Android compile failed without the workaround