Unterschied zwischen statischen und shared Bibliotheken im Android-NDK?
Ich bin neu in der Android-NDK und ich verstehe nicht die Unterschiede zwischen static und shared libraries. Was sind Sie, und wenn würde ich wählen Sie einen Typ über den anderen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Begriff shared library ist nicht eine perfekte Passform über die Android NDK, weil in vielen Fällen die .so Bibliotheken sind eigentlich nicht von Anwendungen gemeinsam genutzt. Es ist besser zu klassifizieren, die Bibliotheken, die das NDK baut, wie statische und dynamische.
Jede Android-Anwendung ist eine Java-Anwendung, und der einzige Einstiegspunkt für die NDK code geladen wird es als dynamische Bibliothek und rufen durch JNI.
Statische Bibliotheken sind Archive von kompilierten Objekt-Dateien. Sie erhalten gebündelt in anderen Bibliotheken zu erstellen. Ungenutzte Teile des Codes von statischen Bibliotheken entfernt werden, die durch das NDK zu einer Verringerung der Größe.
Dynamische Bibliotheken werden zur Laufzeit geladen, die aus separaten Dateien. Sie enthält statische Bibliotheken, dass Sie abhängig sind, oder laden dynamischer Bibliotheken.
So, was Sie wirklich brauchen für die Android-Entwicklung ist mindestens eine geteilte Bibliothek, die aufgerufen wird, werden vom Java-code aus, und mit ihm verknüpfte Abhängigkeiten als statische Bibliotheken bevorzugt.
Native shared libraries: Die DDR baut diese Bibliotheken, oder .also Dateien, die von Ihrem nativen Quellcode.
Native statische Bibliotheken: Das NDK kann auch die Erstellung von statischen Bibliotheken, oder .die Dateien, die Sie verknüpfen können gegen andere Bibliotheken.
Dies ist nach NDK Dokumentation
Statische libs – alle-Bibliothek-Binärdateien werden als Teil unserer ausführbare Datei während der linking-Prozess. Also, wir brauchen nicht die libs nicht mehr, aber es werde erhöhen die Größe der ausführbaren Datei.
Shared libs – die endgültige ausführbare Datei nur Verweise auf die libs, nicht auf den code selbst. Es erfordert, dass die Umgebung, in der wir unsere ausführbare Datei hat Zugriff auf alle Dateien der Bibliotheken verwendet, die durch unser Programm.