2013-03-07 5 views
15

Ich benutze Android NDK R8D und Eclipse Juno. Ich versuche, C++ - Code zu kompilieren, der C++ 11-Sachen wie mutex, lock_guard, shared_ptr usw. in einem nativen Android-Projekt in Eclipse verwendet.Wie kompiliert man C++ 11 Code mit Android NDK und Eclipse?

bekomme ich Fehler wie:

"error: 'shared_ptr' is not a member of 'std'"

"fatal error: mutex: No such file or directory"

ich auf eine ähnliche Frage here kam. Es scheint für sie zu funktionieren, aber die Erklärung dort ist nicht vollständig, also kann ich es nicht für mich arbeiten lassen.

Ich fügte zu der Application.mk und "LOCAL_CFLAGS += -std=c++11" zu Android.mk Datei hinzu. Trotzdem kompiliert es nicht.

In dem obigen Link heißt es:

"Be sure that the standard library include path (like /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include) is in the target settings."

Wie und wo kann ich es einsetzen?

Ich bekomme auch Fehler in der Eclipse-IDE (auf der Quelle, vor dem Kompilieren). Ich weiß, dass ich "__GXX_EXPERIMENTAL_CXX0X__" definieren sollte, um sie zu lösen, aber ich weiß nur nicht, wo man es setzt.

Also, wenn jemand eine Antwort mit einer vollständigen Erklärung der Kompilierung und Eclipse-Arbeit mit C++ 11 schreiben könnte, wäre es großartig.

+0

Lesen Sie das NDK-Dokument, das ist nicht möglich. – Geoffroy

+0

http://stackoverflow.com/questions/14532057/smart-pointers-not-working-with-android-ndk-r8 es scheint, dass sie es verwaltet – DeathlessHorsie

+0

welchen Compiler verwenden Sie für C++? – naxchange

Antwort

6

In Bezug auf Ihre erste Frage:

  1. Zum Projekt> Eigenschaften> C/C++ Allgemein/Pfade und Symbole

  2. In der "Enthält" Registerkarte, fügen Sie das richtige Verzeichnis, z.B. /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include

In Bezug auf Ihre zweite Frage, ich bin auch der Suche nach einer Antwort. Es ist absolut nicht klar, wie man das Makro GXX_EXPERIMENTAL_CXX0X in Eclipse definiert.

Einige sagen, dass es „als ein vordefiniertes Makro zu dem Indexer hinzugefügt“ sollte, aber es sieht aus wie wir beide keinen Weg, dies zu realisieren finden konnten ...

ich an anderer Stelle gelesen, dass es sein sollte hinzugefügt zu "C/C++ Allgemein/Pfade und Symbole/Symbole/GNU C++", aber ich finde den "Symbole/GNU C++" Teil in meiner Version von Indigo nicht.

+0

Ich benutze Eclipse Juno und ich habe auch nicht den "Symbols/GNU C++" Teil, und ohne "__GXX_EXPERIMENTAL_CXX0X__" zu definieren, wird der Indexer die C++ 11 Sachen nicht erkennen. Haben Sie es geschafft, Ihren Code mit dem ndk zu kompilieren? – DeathlessHorsie

+0

Ja, der (C++ 11) Code kompiliert sich gut mit dem NDK. Das Problem besteht nur auf der Ebene der Indizierung in Eclipse. –

+2

Für das Problem, den Indexer in Eclipse Juno zu reparieren, habe ich einen Workaround-Hack bei "http://stackoverflow.com/questions/9375708/eclipse-indexer-errors-when-using-stl-with-android-ndk veröffentlicht/15782177 # 15782177 " –

0

Ich finde exportieren eine Umgebungsvariable NDK_TOOLCHAIN_VERSION = 4.8, bevor ich starte Eclipse kann dieses Problem lösen.

Eclipse verwenden ndk Standard-Toolchain-Version 4.6, wenn NDK_TOOLCHAIN_VERSION nicht definiert ist, und gcc diese Version nicht alle zukünftigen C++ 11 wie Multithread und so weiter unterstützt.

Verwandte Themen