2010-05-31 12 views
32

Ich versuche eine statische Bibliothek für Android zu kompilieren, aber ich kann nicht herausfinden, wie man es kompiliert. Die Bibliothek verwendet Standardbibliotheken (stdio.h usw.) und libxml2.Wie kompiliere ich eine statische Bibliothek mit dem Android NDK?

Ich versuche, mit Arm-EABI-gcc zu kompilieren, aber ich erhalte den folgenden Fehler:

/cygdrive/c/Android-NDK-r4/build/platforms/android-8/arch-x86/usr /include/asm/posix_types.h:15:28: Fehler: posix_types_64.h: Keine solche Datei oder Verzeichnis

Wie bekomme ich das zum Funktionieren?

Antwort

44

Wie ich es verstehe, ist die korrekte Methode ndk-build zu verwenden und den Compiler nicht direkt aufzurufen.

In Android.mk müssen Sie für jede statische Bibliothek, die Sie kompilieren möchten, ein Modul angeben und dann angeben, dass Ihre gemeinsam genutzte Bibliothek es verwenden soll.

Beispiel einer modifizierten Android.mk Datei des hallo-jni Beispielprojekt:

Wenn Sie einstellen wollen, welche Module zu kompilieren, wenn Sie NDK-build ausführen können Sie eine Anwendung erstellen erstellen. mk-Datei (im selben Verzeichnis wie Android.mk) und listet alle Module wie im folgenden Beispiel:

APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n> 
+0

Ich habe das gleiche getan, aber immer noch nicht funktioniert siehe http: // stackoverflow.com/questions/10106965/how-to-link-any-libarary-in-ndk-application –

+7

Können Sie eine statische Bibliothek (.a-Datei) ohne eine gemeinsame Bibliothek erzeugen, die sie verwendet? – user1027169

+0

[Kompilieren Sie statische Bibliothek mit Standalone-Tool-Kette für Android] (https://tariqzubary.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/) – TMZ

6

als Reaktion auf

Can you generate a static library (.a file) without a shared library that uses it?

(was eigentlich eine eigene Frage sein sollte), ist die Antwort ja.

Standardmäßig erstellt das NDK nur ausführbare Dateien und gemeinsame Bibliotheken (mit ihren Abhängigkeiten natürlich). Sie können jedoch das NDK zwingen, eine eigenständige statische Bibliothek zu erstellen, indem Sie explizit in Ihrer Application.mk darauf verweisen.

Ihre statische Bibliothek-Modul Unter der Annahme LOCAL_MODULE: = libXYZ, die folgende Zeile in Application.mk hinzufügen (im selben Ordner wie die Android.mk Erstellen der Datei, wenn sie nicht existiert):

APP_MODULES := XYZ 

Beachten Sie, dass der Wert APP_MODULES das Präfix lib nicht enthält, das im Namen des statischen Bibliotheksmoduls enthalten ist.

Alternativ können, wenn Sie nicht über eine Application.mk erstellen möchten, können Sie den Wert in der Befehlszeile angeben: ndk-build APP_MODULES=XYZ

1

Ein cooler Trick: Wenn Sie eine Android.mk-Datei haben, können Sie ändern, der Buildtyp aus:

include $(BUILD_SHARED_LIBRARY) 

zu

include $(BUILD_STATIC_LIBRARY) 

und .a Bibliotheken Ausgabe an den obj/Ordner in ihre jeweiligen Architekturen sein, wenn Sie die lib NDK-build rary.

Verwandte Themen