libjpeg-turbo für android
Brauche ich libjpeg-turbo für android-ndk. Hat jemand es geschafft, um es zu kompilieren, als .eine (statische) lib?
Ich habe versucht ein paar mal, aber es gab mir eine Menge von Fehlern nur.
InformationsquelleAutor der Frage KoVadim | 2012-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Installation von Android NDK. Folgende Anweisungen wurden verifiziert mit r8bältere Versionen können Probleme haben, weiß ich nicht.
Holen Sie sich die Android-Quellen für libjpeg-turbo von Benjamin Gaignard:
In der libjpeg-turbo Verzeichnis erstellt gitBearbeiten Sie die Datei Android.mk: nach Zeile 70,
LOCAL_MODULE := libjpeg
Folgendes hinzu:Laufen ndk-build:
Gewinn!
PS: Sie möchten die armeabi-v7a version:
Zusammenzustellen oder für ARMum die Leistung zu verbessern, fügen Sie der Kommandozeile:
Wenn Ihr Ziel ist NEON - Unterstützung, hinzufügen Befehlszeile:
UPDATE: um es Arbeit mit Android NDK r15 und später, entfernen Sie alle Verweise auf
libcutils
aus Android.mk.InformationsquelleAutor der Antwort Alex Cohn
Diese Antwort baut auf Alex Cohn ' s Antwort. Volle Anerkennung gebührt ihm für mich immer gestartet. Diese Antwort wird Ihnen erlauben, zu bauen libjpeg-turbo mit Montage-ARM für ARM (mit oder ohne NEON) als auch x86. Die Kompatibilität ist auch für MIPS, so dass Sie ein guter Bürger und bauen Sie Ihre app für alle Plattformen, dass der r8e version des Android NDK unterstützt.
Ich noch ein relativer Neuling, um tatsächlich Fragen zu beantworten, also nicht über die Berechtigungen, um Anhänge. Also ich bin zu haben, um inline-eine Reihe von code. Ich bin auch sicher, es gibt bessere Wege, um bits und Stücke, die von unten, also bin offen für Verbesserungsvorschläge.
Immer alle Arbeit getan war in sechs Schritten (Schritt zwei hat viele sub-Schritte -- jedes, von dem kann man nach der Haupt-sechs-Schritte):
Download über git die libjpeg-turbo Bibliothek, die eine Reihe von code und .mk-Dateien für Android. Ich habe es runtergeladen von hier aus mit git:
Volle Kredit-und Dank gegeben sein müssen, um Tom Gall für die Durchführung der ersten arbeiten.
Download YASM (ein assembler für x86) und konfigurieren Sie die Android-build-Umgebung zu unterstützen. Siehe der Satz von Anweisungen zum konfigurieren der YASM für das Android-NDK, ich bin auch unter die horizontale Linie am Ende von meinem Android.mk änderungen in Schritt 6. Unterstützung von x86 erfordert, dass Sie nicht schüchtern über die Anpassungen des NDK installieren.
Ich vielleicht hätte der NASM compiler, aber war weit genug unten die YASM Weg, bevor die Untersuchung NASM, brachte ich die YASM Weg bis zur Fertigstellung.
Erstellen, die simd/jsmidcfg.inc-Datei. Die libjpeg-turbo Bibliothek bietet simd/jsmidcfg.inc.h. Es ist gedacht für die pre-Prozessor zu nehmen .h und konvertieren Sie Sie in eine .inc. Ich bin sicher, es gibt eine bessere Möglichkeit für Sie zu passieren, als das, was ich getan habe. Aber konnte nicht es sortiert sich durch Zeitdruck. Stattdessen habe ich manuell lief man dem gcc, das kam mit Android zu erstellen, die Datei mit dem folgenden Befehl:
Nach dem pre-Prozessor abgeschlossen hatte, musste ich von hand Bearbeiten Sie die Datei, um es in einem brauchbaren Zustand. Ich musste wählen Sie alle Zeilen oberhalb "; -- jpeglib.h" und löschen Sie Sie.
Nächsten, ich musste jede der %definiert, angefangen mit _cpp_protection_ und duplizieren jedes dieser %definiert, OHNE die _cpp_protection_. Zum Beispiel
%define _cpp_protection_RGB_RED 0
wurde%define RGB_RED 0
ARM, ich wollte meinen code dynamisch unterstützt NEON-Anweisungen, die auf hardware, die es hatte, und fallback auf etwas einfacheres auf hardware, die nicht, ich veränderte simd/jsimd_arm.c dynamisch Abfragen für die Informationen. Ich wollte nicht zu haben, die Wahl zu treffen, wenn Gebäude libjpeg-turbo.
Fügte ich die folgenden Zeilen des Codes:
und
innerhalb der init_simd () - Methode.
Aktivieren MIPS.
Werden, ein guter Bürger, ich wollte zu aktivieren Zusammenstellung auf MIPS. Während es gibt keinen assembler-code für MIPS, der code sollte zumindest kompilieren und ausführen. Zu tun, dass ich kopiert simd/jsimd_arm.c-simd/jsimd_mips.c. Ich bearbeitet die Datei, so dass
init_simd()
setsimd_support = 0;
ich habe auch allejsimd_can_*()
Methoden zu 0 zurück. Schließlich entfernte ich die Umsetzung von allen anderen Methoden.Weil ich war daran interessiert, mehr als nur einen build für die ARM -, änderte ich die Anwendung.mk-Datei, um die folgenden Zeilen:
Den APP_OPTIM kommt aus Wie optimiert man ein native code mit android-ndk (Geschwindigkeits-Optimierung)
Innerhalb Von Android.mk, ich auskommentiert, alles von der "cjpeg" Kommentar-block und unten. Zu tun, ein block-Kommentar, folgte ich dem Rat Wie zum hinzufügen von multi-line-Kommentare in makefiles
Ich neben individuell auf dem Android.mk-Datei selbst, so dass ich bauen könnte für alle derzeit unterstützten CPUs (ARM, x86, MIPS). Hier ist, was ich am Ende mit (code auskommentiert, weil ich wollte eine statische Bibliothek -- auch zu verlassen, der original-code, damit ich sehen kann, was geändert). Sie werden wahrscheinlich haben, zu ändern (oder entfernen) die addprefix-Methode aufrufen, da die Datei unten ist angepasst für meine build-Umgebung. Aber anders als das, es sollte für Sie arbeiten.
.
Einige der source-code, die Schiffe mit libjpeg-turbo ist .asm-format. Das heißt, es muss kompiliert werden, mit dem NASM assembler. Wie es Schiffe, die Android NDK nicht unterstützen.
Bekommen .asm unterstützt das arbeiten mit NDK, ich folgte das in groben Zügen hier vorgestellt: http://software.intel.com/en-us/articles/using-yasm-compiler-on-android-ndkbuild
Hier sind weitere detaillierte Anweisungen. Im android-ndk-r8\build\core die folgenden Dinge müssen auftreten:
bauen-binary.mk:
all_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION)
=>all_source_extensions := .c .s .asm .S $(LOCAL_CPP_EXTENSION)
Für mich, die oben auf der Linie 228.
Nach der Zeile, die beginnt mit: "# Bauen der Quellen Objekt-Dateien" Sie werden sehen, mehrere foreach-Schleifen. Fügen Sie eine wie diese (ich habe es auf Linie 272):
Definitionen.mk:
Erstellen Sie eine neue compile-asm-Quelle entsprechend den neuen Eintrag wir innerhalb der neuen for-Schleife oben. Wir müssen auch hinzufügen, eine neue Definition innerhalb der Datei. Ich fügte hinzu, die folgenden. Es ist eine Kombination und Vereinfachung der verschiedenen Vorschriften zu erstellen .c-Dateien. Wir brauchen einen anderen Satz von Optionen bei der Verwendung der yasm erfordern diese Veränderungen.
Suchen Sie nach der Zeile, die beginnt mit 'compile-s-Quelle'. Ich fand es in Zeile 1491. Die neue compile-asm-Quelle gehen kann, rechts unten,.
Als Nächstes suchen Sie die Zeile, die beginnt mit "get-Objekt-name". Ich fand es in Zeile 1270. Hinzufügen ".asm" auf die innere for-Schleife. Legen Sie es zusammen mit dem .c, .s, und .S
import-einheimischen.mk:
Fügen Sie die folgende Zeile unten die LOCAL_CFLAGS und die LOCAL_CPPFLAGS Linie
Standard-build-Befehle.mk:
Fügen Sie die folgende Zeile irgendwo in die Datei. Ich habe mir unter dem TARGET_CXX Abschnitt und vor der TARGET_LD Abschnitt.
Herunterladen und kopieren yasm.exe um den build-Ordner:
Laden Sie eine Kopie von YASM aus hier: http://yasm.tortall.net/
Habe ich die Win64-version des NDK, so heruntergeladen, die Win64 version von YASM. Wenn Sie mit der Win32-version des NDS, download th Win32-version von YASM.
Sollten Sie nur bekommen Sie das .exe. Kopieren Sie die folgenden Verzeichnisse yasm.exe. Wenn Sie noch andere toolchain-Versionen, kopieren Sie diese Verzeichnisse als auch:
Kopieren Sie dann die Datei erneut, um die Verzeichnisse unten, als i686-linux-android-yasm.exe. Und wie oben, wenn Sie andere toolchain-Versionen, kopieren Sie diese Verzeichnisse als auch:
InformationsquelleAutor der Antwort markmanca
Dank Alex Cohn und antwortete Dec teilen;
Diese Antwort baut auf Alex Cohn Antwort & beantwortet Dez Antwort;
Ich bin mit jpeg-turbo 1.3.9, ndk-r9d, über yasm.exe die ndk-r9d enthalten ist, nach der Tat, antwortete Dec-Schritt 3, ich hatte einen Fehler in simd/jsimdext.inc line:182 "%define EXTN(name) _ %+ name ; foo() -> _foo"; ändern Sie Sie "%definieren EXTN(name) name"; klicken Sie dann ok, dieses problem behoben hatte;
dies ist mein Android.mk
InformationsquelleAutor der Antwort Mr. Xian
Für jeden, der versucht zu bauen, die offizielle repo-version, die ich hatte Erfolg mit dem patch hier beigefügt: libjpeg-turbo-cross-kompilieren zu Android schlägt.
Dann, je nachdem, ob Sie kompilieren für 32-bit-oder 64-bit:
oder
Und cmake mit -DWITH_SIMD=FALSE -DCMAKE_TOOLCHAIN_FILE=your_toolchain_file.
Natürlich, ich bin mir bewusst, dass die Deaktivierung von SIMD ist nicht ideal, aber wenigstens habe ich es geschafft, ein build ich benutzen können. Hoffentlich werden die autotools-NEON-SIMD-Unterstützung wird behoben, in der Zukunft. Mit ./konfigurieren Sie auch nicht zu bauen, die richtige SIMD-für ARM.
Übrigens, ich wünschte die Leute würde dazu beitragen, Korrekturen an der Haupt-repo, anstatt einfach nur die Verzweigung. Es ist schon 2 Jahre seit der letzten änderung der repo-zitiert in alex-cohn ' s Antwort.
InformationsquelleAutor der Antwort Droid Coder