Was sind .a- und .so-Dateien?

Lesezeit: 3 Minuten

Benutzeravatar von Dunc
Dunc

Ich versuche gerade, eine C-Anwendung zu portieren AIX und bin verwirrt. Was sind .a- und .so-Dateien und wie werden sie beim Erstellen/Ausführen einer Anwendung verwendet?

  • eine ist Bibliothek aArchiv und andere ist sgehasst oObjekt

    – Shiplu Mokadim

    21. März 2012 um 16:56 Uhr

  • Mögliches Duplikat von Was ist der Unterschied zwischen .so-, .la- und .a-Bibliotheksdateien?.

    – Peter Mortensen

    26. November 2017 um 17:10 Uhr


Benutzeravatar von Leafy
Belaubt

Archivbibliotheken (.a) werden statisch gelinkt, dh wenn Sie Ihr Programm mit der Option -c in gcc kompilieren. Wenn sich also die Bibliothek ändert, müssen Sie Ihren Code erneut kompilieren und erstellen.

Der Vorteil von .so (Shared Object) gegenüber .a-Bibliotheken besteht darin, dass sie während der Laufzeit verknüpft werden, dh nach Erstellung Ihrer .o-Datei -o-Option in gcc. Wenn es also eine Änderung in der .so-Datei gibt, müssen Sie Ihr Hauptprogramm nicht neu kompilieren. Stellen Sie jedoch sicher, dass Ihr Hauptprogramm mit dem Befehl ln mit der neuen .so-Datei verknüpft ist.

Dies wird Ihnen helfen, die .so-Dateien zu erstellen.
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

  • bezieht sich irgendetwas davon auf pic (positionsunabhängiger Code)?

    – transang

    19. Oktober 2018 um 0:49 Uhr

.a sind statische Bibliotheken. Wenn Sie darin gespeicherten Code verwenden, wird er ihnen entnommen und in Ihre eigene Binärdatei eingebettet. In Visual Studio wären dies .lib-Dateien.

.so sind dynamische Bibliotheken. Wenn Sie darin gespeicherten Code verwenden, wird er nicht genommen und in Ihre eigene Binärdatei eingebettet. Stattdessen wird nur darauf verwiesen, sodass die Binärdatei davon abhängt und der Code aus der so-Datei zur Laufzeit hinzugefügt/geladen wird. In Visual Studio/Windows wären dies .dll-Dateien (mit kleinen .lib-Dateien, die Verknüpfungsinformationen enthalten).

  • Hallo, gibt es eine Möglichkeit, die .so-Datei in c/c++-Code zu dekompilieren?

    – Jischant

    17. November 2017 um 6:31 Uhr

  • @Ancee: Sehen Sie sich diese Frage an: stackoverflow.com/questions/205059/is-there-ac-decompiler

    – Paul Winz

    14. März 2018 um 21:34 Uhr

  • Ein kleines .lib Datei für .dll wird als Importbibliothek bezeichnet.

    – Second-Person-Shooter

    11. Januar 2019 um 5:09 Uhr

  • “. Stattdessen wird nur referenziert”, wie funktioniert das – muss der Code in der dynamischen Bibliothek nicht in den Hosting-Prozess geladen werden?

    – Joel Blum

    20. Oktober 2021 um 12:34 Uhr

  • @JoelBlun Ja, aber nur zur Laufzeit, nicht zur Kompilierzeit.

    – Mario

    21. Oktober 2021 um 5:15 Uhr

.a-Dateien sind normalerweise Bibliotheken, die statisch verknüpft werden (oder genauer gesagt Archive), und

.so sind dynamisch gelinkte Bibliotheken.

Um eine Portierung durchzuführen, benötigen Sie den Quellcode, der kompiliert wurde, um sie zu erstellen, oder entsprechende Dateien auf Ihrem AIX-Rechner.

  • Wie erstelle ich meine Anwendung für die Verwendung von .so-Dateien?

    – Dunc

    21. März 2012 um 16:58 Uhr

  • Es gibt viele ausgezeichnete Referenzen zum Erstellen beider Arten von Bibliotheken und zum Verlinken mit ihnen im Internet. Google ist dein Freund.

    – David Zeiger

    21. März 2012 um 17:06 Uhr

  • @Dunc – Es gibt ein paar Möglichkeiten. Hast du ein Makefile? Normalerweise gibt der Befehl, der das gesamte Programm zusammenbaut (und daher den Linker aufruft), mit -L/dir/dir1/…/ die Orte an, an denen nach Bibliotheksdateien gesucht werden soll, und kann Bibliotheken auch explizit mit -lname benennen. Sie werden feststellen, dass der tatsächliche Name libname.a oder libname.so ist. Der Linker kann dann herausfinden, was zu tun ist, wenn es sich um ein halbwegs normales Programm handelt. Aber Sie haben immer noch das Problem, die .so-Datei zu erstellen oder zu finden. Haben Sie Quellcode zum Erstellen oder eine AIX-Bibliothek?

    – gbulmer

    21. März 2012 um 17:08 Uhr


Sie werden in der Verknüpfungsphase verwendet. .a Dateien sind statisch verknüpft, und .so Dateien sind irgendwie verknüpft, sodass die Bibliothek immer benötigt wird, wenn Sie die exe ausführen.

Sie können herausfinden, wo sie gespeichert sind, indem Sie sich eines der lib-Verzeichnisse ansehen … /usr/lib und /lib haben die meisten von ihnen, und es gibt auch die LIBRARY_PATH Umgebungsvariable.

Wikipedia ist eine anständige Quelle für diese Informationen.

Informationen zu statischen Bibliotheksdateien wie .a read Statische Bibliothek

Um mehr über gemeinsam genutzte Bibliotheksdateien wie .so zu erfahren, lesen Sie Library_(computing)#Shared_libraries Auf dieser Seite gibt es auch nützliche Informationen in der Dateibenennung Sektion.

1428080cookie-checkWas sind .a- und .so-Dateien?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy