Was sind .a und .so Dateien?

Antworten:

482

Archivbibliotheken (.a) sind statisch verknüpft, 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 (gemeinsam genutztes Objekt) gegenüber einer .a-Bibliothek besteht darin, dass sie zur Laufzeit verknüpft sind, dh nach der Erstellung Ihrer Option .o-Datei -o in gcc. Wenn sich also die .so-Datei ändert, 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 hilft Ihnen beim Erstellen der .so-Dateien. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Hoffe das hilft.

Belaubt
quelle
2
Bezieht sich einer dieser Punkte auf pic(positionsunabhängiger Code)?
Transang
213

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

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

Mario
quelle
Hallo, gibt es eine Option zum Dekompilieren der .so-Datei in C / C ++ - Code?
Jishant
@ Ancee: Schauen Sie sich diese Frage an: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
Eine kleine .libDatei für .dllwird als Importbibliothek bezeichnet.
Geldorientierter Programmierer
13

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

Um einen Port zu erstellen, benötigen Sie den Quellcode, der für die Erstellung kompiliert wurde, oder gleichwertige Dateien auf Ihrem AIX-Computer.

gbulmer
quelle
Wie erstelle ich meine Anwendung für die Verwendung von .so-Dateien?
Dunc
Es gibt viele hervorragende Referenzen zum Erstellen beider Arten von Bibliotheken und zum Verknüpfen mit ihnen im Web. Google ist dein Freund.
David Pointer
@Dunc - Es gibt verschiedene Möglichkeiten. Hast du ein Makefile? Normalerweise gibt der Befehl, der das gesamte Programm zusammenstellt (und daher den Linker aufruft), die Orte an, an denen nach Bibliotheksdateien mit -L / dir / dir1 /.../ 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 dies ein einigermaßen normales Programm ist. Sie haben jedoch immer noch das Problem, die .so-Datei zu erstellen oder zu finden. Haben Sie Quellcode zum Erstellen oder eine AIX-Bibliothek?
Gbulmer
10

Sie werden in der Verknüpfungsphase verwendet. .aDateien sind statisch verknüpft und .soDateien sind sozusagen verknüpft, dass die Bibliothek 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/libund /libdie meisten davon haben, und es gibt auch die LIBRARY_PATHUmgebungsvariable.

Matt
quelle
0

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

Um mehr über statische Bibliotheksdateien wie .a zu erfahren, lesen Sie Static libarary

Informationen zu gemeinsam genutzten Bibliotheksdateien wie .so lesen Sie Library_ (Computing) #Shared_libraries. Auf dieser Seite finden Sie auch nützliche Informationen im Abschnitt Dateinamen .

user3731622
quelle