Frage

Auf 'C', Linux,

Benötige ich statische Bibliotheken statisch zu verknüpfen, oder die gemeinsam benutzten, die ich genügen haben? Wenn nicht, warum nicht? (Haben sie nicht die gleichen Daten enthalten?)

War es hilfreich?

Lösung

Ja, müssen Sie statische Bibliotheken eine statisch gelinkte ausführbare Datei erstellen.

Statische Bibliotheken sind Bündel von kompilierten Objekten. Wenn Sie statisch mit zu Bibliothek verknüpfen, ist es das Gleiche wie die Zusammenstellung Ergebnisse dieser Bibliothek nehmen, sie in Ihrem aktuellen Projekt Auspacken und mit ihnen, als ob sie Ihre eigenen Objekte waren.

Dynamische Bibliotheken sind bereits verknüpft. Dies bedeutet, dass einige Informationen, wie Betriebsverlagerungen sind bereits fixiert worden und hinausgeworfen.

Darüber hinaus dynamische Bibliotheken müssen als positionsunabhängigen Code kompiliert werden. Dies ist keine Einschränkung auf statische Bibliotheken und führt zu einem signifikanten Unterschied in der Leistung auf einigen gemeinsamen Plattformen (wie x86).

Es gibt Tools wie ELF Statifier , die dynamisch gebundene Bibliotheken in eine dynamisch gebundene ausführbare Datei zu bündeln versuchen, aber es ist sehr schwierig, ein korrekt arbeitendes Ergebnis unter allen Umständen zu erzeugen.

Andere Tipps

Es gibt nicht so etwas wie statische Kompilierung nur statisch Linken. Und dafür müssen Sie statische Bibliotheken. Der Unterschied zwischen statischen und dynamischen Verknüpfung besteht darin, dass mit dem ehemaligen, Namen zu Verbindungszeit aufgelöst werden (kurz nach der Kompilierung Zeit), wheras mit letzterem sie gelöst sind ebenso wie das Programm beginnt zu laufen.

Statische und dynamische Bibliotheken können oder nicht die gleichen Informationen enthalten, abhängig von vielen Faktoren ab. Die Entscheidung, ob statisch oder dynamisch Code verknüpfen ist ein wichtiger und oft Anwendungsarchitektur beeinflussen.

Alle Bibliotheken, die Sie in ein statisch gelinkte Programm verknüpfen muss die statische Variante sein. Während die dynamischen (libfoo.so) und statische (libFoo.a) Bibliotheken in ihnen die gleichen Funktionen haben, sind sie unterschiedliche Format-Dateien und so müssen Sie den passenden Typen für Ihr Programm.

Eine weitere Option ist Hermelin ( http://magicErmine.com ) Es ist wie statifier, aber in der Lage mit dem Gedächtnis der Randomisierung zu behandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top