2015-07-14 12 views
7

È possibile compilare il codice sorgente C++ 14 per Android con ndk10d? Ho provato entrambi i compilatori g ++ e clang ma sembra che le bandiere -std=c++14-std=c++1y non funzionino.Come compilare il codice C++ 14 per Android?

Se uso c++_static come mio APP_STL, ottengo il seguente errore:

User/someone/Software/Android/android-ndk-r10d/platforms/android-17/arch-arm/usr/include/locale.h:55:1: error: empty struct has size 0 in C, size 1 in C++

Edit: Sto usando Mac OSX 10.10.4 con Xcode 6.3.2 (in grado di compilare C + +14 per iOS).

+0

Sto usando C++ 14 con l'NDK (R10C) per un po ', quindi funziona. Sto usando clang 3.4/3.5 per costruire, e gnustl_static come STL (non ho potuto creare con C++ _ static, non ricordo la ragione esatta per quello). Non sono sicuro di aver usato '-std = C++ 14' o' std = C++ 1y', ma penso che fosse '1y'. – Michael

+0

Ho provato le tue impostazioni ma ancora non funziona, sto usando clang 3.6 (basato su LLVM 3.6.0) – Crossfire

risposta

0

If I use c++_static as my APP_STL, i get the following error:

User/someone/Software/Android/android-ndk-r10d/platforms/android-17/arch-arm/usr/include/locale.h:55:1: error: empty struct has size 0 in C, size 1 in C++

Sto diventando lo stesso quando sto usando iostream. Ma questo è solo un avvertimento (sto usando NDK 10e) e funziona bene. L'avviso è "-Wextern-c-compat" che è possibile disattivare come qualsiasi altro avviso.

+0

Stavo usando '-werror', quindi il compilatore ha reso questo avviso un errore. – Crossfire

+0

Ah, giusto. Bene, potresti semplicemente disattivare questo avviso o continuare a rimuovere la bandiera di guerra. Per ora ho solo l'avviso che mostra. – Zammbi

3

Se qualcuno ha bisogno di una risposta a questa domanda, l'ho trovato here.

Si chiama CrystaX e in pratica si tratta di una versione modificata di Android NDK che consente il targeting C++ 14, librerie Boost e ha un certo numero di altre funzionalità.

1

Sto usando le seguenti direttive nel mio Application.mk. Passare alla toolchain clang tramite NDK_TOOLCHAIN_VERSION ha risolto un sacco di problemi.

APP_CPPFLAGS += -std=c++14 
APP_STL := c++_static 
NDK_TOOLCHAIN_VERSION := clang 
5

Io uso android-ndk-r12b-windows-x86_64, compilare il successo con -std = C++ 14

Android.mk

LOCAL_CPPFLAGS = -Wall -std=c++14 
+0

Sono stato in grado di compilare, ma quando provo a caricare la libreria condivisa si dice che il file binario non è un eseguibile ELF valido. –

Problemi correlati