2012-03-24 8 views
2

Ich habe ein kleines Android-System gebaut, die weniger Speicherplatz für meine nativen Anwendungen verwendet.Wie zu ändern Standard lib Verknüpfung für Android Cross Toolchain (Verknüpfung ohne libC++ und libm)

Ich fand, dass alle meine apps libm.so und libstdc++.so sogar verbinden wird, obwohl sie rein in C geschrieben wurden, und verwenden Sie keine Funktionen in libm (z sin()). Die Bibliothek verwendet mehr als 20 KB Speicher. Wie kann ich die Verknüpfungen libstdc++ und libm entfernen?

Antwort

1

Ohne Ihr Ziel im Prinzip zu verwerfen, startet Android Apps, indem es ein Kind aus dem Zygote-Prozess abzweigt, der viele Systembibliotheken in den Speicher geladen hat, um von allen Apps gemeinsam genutzt zu werden. Viele Dalvik Klassen sind ebenfalls vorinstalliert.

Da Sie diese freigegebenen Zuordnungen erben, wird nur sehr wenig physischer Speicher verbraucht. Für jeden untergeordneten Prozess, in dem eine Anwendung ausgeführt wird, benötigen die Preload-Bibliotheken und -Klassen nur Speicher zum Verfolgen von Daten im vorgeladenen Coderaum und schreibbare Daten Raum.

Aus diesem Grund spart es tatsächlich Speicher, um allen Apps etwas zu geben, was nur die Mehrheit benötigt, anstatt diejenigen zu haben, die ihre eigene (nicht übertragbare) Kopie laden müssen. Während eine von einem Entwickler geschriebene ndk-Bibliothek möglicherweise nur C verwendet, ist eine Android-App als Ganzes unvermeidbar ein C++ - Programm aufgrund der enthaltenen Plattformcode-Teile.

+0

+1 .. oben von dem, was Sie erwähnen, dalvik ist sicherlich bereits mit libm und libstdC++ verknüpft, so dass sie bereits in dem Prozess zugeordnet werden, in dem die ndk-Bibliothek geladen ist (auch wenn nichts anderes verwendet wird). Ich habe meine sinnlose Antwort entfernt :-) – richq