Wie link eine vorgefertigte gemeinsam genutzte Bibliothek auf ein Android-NDK-Projekt?
Hier habe ich dieses Android.mk
Datei in jni/
Ordner.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := offlineDownload
LOCAL_SRC_FILES := offline_download.c
LOCAL_SHARED_LIBRARIES :=../lib/libpackext.so.1.0
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
Machen und eine lib
Ordner im Projekt Verzeichnis und legte meine vorgefertigte .so
Bibliothek und machen eine Android.mk
- Datei, die enthält die folgenden
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := packext
LOCAL_SRC_FILES := libpackext.so.1.0
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
include $(PREBUILT_SHARED_LIBRARY)
Und wenn ich ndk-build -B
Befehl, als ich es bekam undefined reference to packageExtraction. Hier verwende ich meine vorgefertigte Bibliotheksfunktionen, bedeutet das, ich kann keine Verbindung meine vordefinierte geteilte Bibliothek, um meine offlinedownload
Bibliothek.
Also jeder Körper bitte helfen Sie mir, um zu lösen dieses Problem.
InformationsquelleAutor der Frage user1089679 | 2012-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ein komplettes Android.mk-Datei für die Verwendung einer 3rd-party-gemeinsam genutzte Bibliothek.
Die Bibliothek (libffmpeg.so versetzt wird, in der jni-Ordner.
Seine "LOCAL_EXPORT_C_INCLUDES" gibt an, wo die header-Dateien für die Bibliothek.
Wenn Sie wollten Unterstützung für mehrere Architekturen dann könnten Sie angeben:
in Ihrer jni/Anwendung.mk und ändern Sie die LOCAL_SRC_FILES etwas wie:
Ort und eine libffmpeg.also bei jni/armeabi/libffmpeg.so, jni/armeabi-v7a/libffmpeg.so etc ..
InformationsquelleAutor der Antwort Dan Brough
Haben Sie zu tun, entweder eine der folgenden:
Ausschneiden und einfügen-alles außer LOCAL_PATH := $(call-my-dir) aus deinem zweiten Android.mk in Ihrer ersten.
Setzen Sie die folgenden in das Ende des ersten Android.mk:
$(call-import-Modul,packext)
Stellen Sie außerdem sicher, dass Sie Ihren NDK_MODULE_PATH-Umgebungsvariable auf einen Pfad, wo das Android.mk-Datei definieren das Modul packext gefunden werden kann.
Müssen Sie auch ändern Sie die LOCAL_SHARED_LIBRARIES in der gleichen Weise mgiza sagte in der ersten Antwort. Ich nehme an, die packageExtraction, dass Sie undefined reference to in Ihre vorgefertigte Bibliothek so, es sei denn, Sie haben andere Verlinkung Probleme, dies sollte das Problem beheben.
InformationsquelleAutor der Antwort Jake
Android NDK offiziellen
hello-libs
CMake Beispielhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Nur für mich gearbeitet auf dem Ubuntu 17.10-host, Android Studio 3, Android SDK, 26, NDK 15.2. also, ich empfehle, dass Sie als Basis für Ihr Projekt.
In der gemeinsam genutzten Bibliothek ist genannt
libgperf
die wichtigsten code-Teile sind:hello-libs/app/src/main/cpp/CMakeLists.txt:
auf C++ - code verwenden:
#include <gperf.h>
header location:
hello-libs/distribution/gperf/include/gperf.h
lib Standort:
distribution/gperf/lib/arm64-v8a/libgperf.so
app/build.gradle:
Dann, wenn man sich unter
/data/app
auf dem Gerätlibgperf.so
wird auch da sein.Wenn Sie nur Unterstützung für einige Architekturen finden Sie unter: Gradle Build NDK Ziel nur ARM
Beispiel git tracks die vordefinierten freigegebenen Bibliotheken, aber es enthält auch das build-system bauen: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
InformationsquelleAutor der Antwort Ciro Santilli 新疆改造中心 六四事件 法轮功
Haben Sie einen Blick auf das ndk Dokumentation für prebuilts:
android-ndk/docs/PREBUILTS.html
Müssen Sie ändern
zu
Sicher sein, dass Ihr Ordner mit dem Android.mk für die packext Modul namens packext und können gefunden werden in Ihrem NDK_MODULE_PATH.
InformationsquelleAutor der Antwort mgiza