Ich versuche, eine einfache Android-Anwendung mit dem NDK und C ++ zu schreiben. Insbesondere möchte ich das gnustdc ++ verwenden, das in der neuesten Version des NDK (r7) enthalten ist. Die JNI-Bibliothek hat kompiliert und funktionierte perfekt als C, aber jetzt, da ich versuche, C ++ einzuführen, bin ich auf einige Probleme gestoßen.
Ich habe ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include/
zu den Includepfaden meines Projekts hinzugefügt, und die #includes
inline wurden aufgelöst. Wenn Sie jedoch versuchen, eine STL-Klasse (z. B. vector
) tatsächlich zu verwenden, wird Symbol 'vector' could not be resolved
angezeigt.
Alle Standard-C-Symbole, die von <stdlib.h>
importiert wurden, funktionieren ebenfalls, bis ich versuche, #include
durch <cstdlib>
zu ersetzen. Dann scheitert es mit Function 'malloc' could not be resolved
und so weiter.
Seltsamerweise behebt das Hinzufügen der stlport-Header (in ${NDK_ROOT}/sources/cxx-stl/stlport/stlport
) alle meine Probleme. Allerdings bin ich in GNU C ++ verlinkt, nicht STLPort, also ist dies eine unbequeme und unpassende "Lösung" im besten Fall. Es scheint seltsam, dass diese Header funktionieren würden, aber die anderen nicht. Kann Eclipse die GNU C ++ - Header nicht indexieren oder auflösen?
Bearbeiten: Ich habe mein Projekt basierend auf:
eingerichtetLesen Sie dies, es hat die Lösung:
Die Zusammenfassung, falls der Link eines Tages stirbt, ist dies:
Es ist ein Fehler in der gnustl_shared Moduldeklaration. Sorry, das wird in der nächsten Version behoben.
In der Zwischenzeit können Sie $NDK/sources/cxx-stl/gnu-libstdc++/Android.mk
manuell ändern und die folgende Zeile ersetzen:
mit:
%Vor%Ich weiß, dass es keine perfekte Lösung ist, aber zumindest lässt es dich durch Eclipse "rennen" oder "debuggen":
Für mich sind die Fehler, die ich bisher wechseln musste:
Wie ich schon sagte, es ist nicht perfekt und Sie könnten dadurch echte Fehler übersehen, aber Sie können immer noch "Go To Declaration" und einige Syntaxüberprüfungsfähigkeiten auswählen sowie die Möglichkeit, Ihr Programm zu starten. Der "ndk-build" -Schritt fängt sowieso alle echten Fehler auf, also ist es wirklich kein großer Verlust. Ehrlich gesagt bin ich mir der Ursache dieses Problems nicht sicher. Es muss wahrscheinlich ein Eclipse-Bug sein.
Off topic aber relevant: Sie können auch die ndk-gdb über Eclipse verwenden. Das Tutorial ist auf dem Blog mit dem OP verknüpft, aber hier ist eine direkte Link trotzdem .
Viel Glück!
Bearbeite (Folge):
Ich habe seitdem einen Weg gefunden, um dieses Problem zu umgehen, zumindest auf meiner Box. Das OP sagte, dass die STLPORT-Header für ihn arbeiteten. Zuerst nicht für mich. Ich musste mein Eclipse-Projekt zerstören und neu starten (aus irgendeinem Grund würde ich einige Include-Definitionen nicht entfernen). Das Hinzufügen von STLPORT behob einige Probleme, aber in ndk r7b bekam ich immer noch seltsame Fehler (z. B. war NULL auch nach dem Einschließen von stddef nicht definiert). Ich musste auch die x86-Header hinzufügen. Diese sollten sich weitgehend mit den Arm-Überlappungen überschneiden, jedoch ist es sinnvoll, die Arm-Einsen in der Einschlussreihenfolge oben zu haben.
Wenn Sie also auf dasselbe Problem gestoßen sind wie ich, fügen Sie
hinzu$ NDK_DIR / Plattformen / android-14 / arch-x86 / usr / include
zu Ihrer Liste von Eclipse enthält auch.
Ich hatte dieses Problem auf Windows aufgrund der unterschiedlichen Pfadformate in cygwin, meine bevorzugte Windows-Shell, und die Pseudo-Unix-Stil Pfade statt Windows. Wenn Sie dieses Problem haben und Cygwin in Ihrem Pfad herumfliegen, könnte Eclipse es verwenden. Ändern Sie die Pfade in Eigenschaften & gt; C Allgemein & gt; Pfade und Symbole als cygwin-Stil und nicht als Windows-Stil (/ cygwin / c / Android .... statt C: \ Android ...) ... jedenfalls funktionierte das für mich .
Tags und Links eclipse eclipse-cdt android c++ android-ndk