Eclipse-CDT findet im NDK-Projekt keine stdlib-Symbole

8

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?

Android.mk

%Vor%

Anwendung.mk

%Vor%

Bearbeiten: Ich habe mein Projekt basierend auf:

eingerichtet

Ссылка

    
Dylan Lukes 31.12.2011, 07:21
quelle

3 Antworten

3

Lesen 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:

%Vor%

mit:

%Vor%     
corbin 05.01.2012, 20:51
quelle
2

Ich weiß, dass es keine perfekte Lösung ist, aber zumindest lässt es dich durch Eclipse "rennen" oder "debuggen":

  • Klicken Sie mit der rechten Maustaste auf Ihr Android C ++ - Projekt und wählen Sie Eigenschaften.
  • Klicken Sie unter C / C ++ General auf "Code Analysis"
  • Wechseln Sie zu "Projekteinstellungen verwenden"
  • Wechseln Sie alle Fehler, die aufgrund der Verwendung der Vektorklasse als "Warnungen" auftreten.

Für mich sind die Fehler, die ich bisher wechseln musste:

  • "Symbol ist nicht aufgelöst"
  • "Mitgliedserklärung nicht gefunden"
  • "Ungültiges Vorlagenargument"
  • "Ungültige Argumente"
  • "Methode kann nicht aufgelöst werden"

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.

    
Sandy Chapman 23.03.2012 02:19
quelle
0

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 .

    
David Karla 17.08.2014 11:40
quelle