Wenn ich versuche, eine C ++ - Klasse wie einen Vektor in mein Android-NDK-Projekt aufzunehmen (mit NDK r5b, der neuesten Version), wird folgende Fehlermeldung angezeigt:
Compile++ thumb : test-libstl <= test-libstl.cpp
/Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory
Andere Personen, die dieses Problem online gemeldet haben, haben durch Hinzufügen Erfolg behauptet
APP_STL := stlport_static
zu ihrer Application.mk-Datei. Ich habe dies getan und jeden anderen möglichen Wert für APP_STL ausprobiert. Ich habe bereinigt, um zu projizieren, ndk-build clean ausgeführt, die Ordner obj und libs gelöscht, und beim Kompilieren kann die Vektorklasse immer noch nicht gefunden werden. Ich arbeite jetzt seit einigen Wochen daran (seit NDK r5 herausgekommen ist) und würde mich sehr freuen, wenn jemand einen Rat hat. Vielen Dank!
quelle
X
\ arch-arm \ usr \ include - ist dasvector
wirklich vorhanden?Antworten:
Es ist möglich. Hier ist ein Schritt für Schritt:
In $ PROJECT_DIR / jni / Application.mk :
Ich habe versucht, stlport_shared zu verwenden, aber kein Glück. Gleiches gilt für libstdc ++.
In $ PROJECT_DIR / jni / Android.mk :
Hier gibt es nichts Besonderes, aber stellen Sie sicher, dass Ihre Dateien .cpp sind .
In $ PROJECT_DIR / jni / hello-jni.cpp :
Das einzige, was mich hier gebissen hat, war #ifdef __cplusplus.
Beobachten Sie die Verzeichnisse.
Verwenden Sie zum Kompilieren
ndk-build clean && ndk-build
.quelle
Android NDK: You might want to use $NDK/build/tools/build-stlport.sh
. HINWEIS: Dies funktionierte nicht unter CygwinWenn Sie Android Studio verwenden und beim Kompilieren mit ndk immer noch die Meldung "Fehler: Vektor: Keine solche Datei oder kein solches Verzeichnis" (oder andere stl-bezogene Fehler) angezeigt wird, kann dies hilfreich sein.
Öffnen Sie in Ihrem Projekt die Datei build.gradle des Moduls (nicht die Datei build.grade Ihres Projekts, sondern die für Ihr Modul) und fügen Sie 'stl "stlport_shared"' im ndk-Element in defaultConfig hinzu.
Zum Beispiel:
quelle
stlport_shared
und nichtstlport_static
?Ich benutze Android Studio und seit dem 19. Januar 2016 hat dies den Trick für mich getan. (Dies scheint sich jedes Jahr zu ändern.)
Gehen Sie zu: app -> Gradle Scripts -> build.gradle (Modul: app)
Dann unter Modell {... android.ndk {... und füge eine Zeile hinzu: stl = "gnustl_shared"
So was:
quelle
gnustl_shared
stattgnustl_static
?fatal error: 'vector' file not found #include <vector>
Sind nach dem Hinzufügen von stl = "gnustl_static" oder "gnustl_shared" zur Gradle-Datei des Moduls zusätzliche Schritte erforderlich?Auch Sebastian hatte dort vor 3 Jahren eine gute Antwort gegeben, ich möchte hier noch eine neue Erfahrung teilen, falls Sie in der neuen ndk-Version auf dasselbe Problem stoßen wie ich.
Ich habe einen Kompilierungsfehler wie:
Meine Umgebung ist android-ndk-r9d und adt-bundle-linux-x86_64-20140702. Ich füge die Datei Application.mk im selben jni-Ordner hinzu und füge eine (und nur eine) Zeile ein:
Aber leider löst es mein Problem nicht! Ich muss diese 3 Zeilen in Android.mk hinzufügen, um es zu lösen:
Und ich habe von hier aus einen guten Austausch gesehen , der besagt, dass "'stlport_shared' bevorzugt wird". Vielleicht ist es eine bessere Lösung, stlport als gemeinsam genutzte Bibliothek anstelle von statisch zu verwenden. Fügen Sie einfach die folgenden Zeilen zu Android.mk hinzu und Sie müssen dann keine Datei Application.mk hinzufügen.
Hoffe das ist hilfreich.
quelle
Lassen Sie mich ein wenig zu Sebastian Roths Antwort hinzufügen .
Ihr Projekt kann mithilfe
ndk-build
der Befehlszeile kompiliert werden, nachdem Sie den Code hinzugefügt haben, den Sebastian gepostet hat. Aber für mich gab es Syntaxfehler in Eclipse, und ich hatte keine Code-Vervollständigung.Beachten Sie, dass Ihr Projekt in ein C / C ++ - Projekt konvertiert werden muss.
So konvertieren Sie ein C / C ++ - Projekt
Um dieses Problem zu beheben, klicken Sie mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf Eigenschaften
Wählen Sie C / C ++ Allgemein -> Pfade und Symbole und fügen Sie die Verzeichnisse
${ANDROID_NDK}/sources/cxx-stl/stlport/stlport
zum Einschließen einKlicken Sie auf Ja, wenn ein Dialogfeld angezeigt wird.
Vor
Nach dem
Update Nr. 1
GNU C. Verzeichnisse hinzufügen, neu erstellen. In den C- Quelldateien
GNU C ++ treten keine Fehler auf . Verzeichnisse hinzufügen, neu erstellen. In CPP- Quelldateien treten keine Fehler auf .
quelle
Wenn Sie ndk r10c oder höher verwenden, fügen Sie einfach APP_STL = c ++ _ static zu Application.mk hinzu
quelle
Dies hat das Problem in meinem Fall verursacht (
CMakeLists.txt
):Es macht alle zuvor definierten Include-Verzeichnisse unsichtbar. Nach dem Entfernen / Umgestalten dieser Zeile funktioniert alles einwandfrei.
quelle
In Android NDK gehen Sie zu Android-ndk-r9b> / sources / cxx-stl / gnu-libstdc ++ / 4.X / include in Linux-Maschinen
Ich habe eine Lösung über den folgenden Link gefunden: http://osdir.com/ml/android-ndk/2011-09/msg00336.html
quelle