Ich versuche gerade, eine C-Anwendung nach AIX und bin etwas verwirrt. Was sind .a- und .so-Dateien und wie werden sie beim Erstellen/Ausführen einer Anwendung verwendet?
Bezieht sich eine dieser Fragen auf pic
(positionsunabhängiger Code)?
Ich versuche gerade, eine C-Anwendung nach AIX und bin etwas verwirrt. Was sind .a- und .so-Dateien und wie werden sie beim Erstellen/Ausführen einer Anwendung verwendet?
Archivbibliotheken (.a) werden statisch gelinkt, d.h. wenn Sie Ihr Programm mit der Option -c in gcc kompilieren. Wenn es also eine Änderung in der Bibliothek gibt, müssen Sie Ihren Code erneut kompilieren und erstellen.
Der Vorteil von .so (shared object) gegenüber .a library ist, dass sie während der Laufzeit gelinkt werden, d.h. nach Erstellung der .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 aber sicher, dass Ihr Hauptprogramm mit dem Befehl ln mit der neuen .so-Datei gelinkt wird.
Dies wird Ihnen helfen, die .so-Dateien zu erstellen. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
.a sind statische Bibliotheken. Wenn Sie darin gespeicherten Code verwenden, wird er aus ihnen entnommen und in Ihre eigene Binärdatei eingebettet. In Visual Studio wären dies die .lib-Dateien.
.so auch die dynamischen Bibliotheken. Wenn Sie darin gespeicherten Code verwenden, wird er nicht übernommen und in Ihre eigene Binärdatei eingebettet. Stattdessen wird er nur referenziert, so dass die Binärdatei von ihnen 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).
@Ancee: Sehen Sie sich diese Frage an: stackoverflow.com/questions/205059/gibt-es-einen-c-decompiler
Es gibt viele ausgezeichnete Referenzen für die Erstellung beider Arten von Bibliotheken und die Verlinkung zu ihnen im Web. Google ist Ihr Freund.
@Dunc - Es gibt mehrere Möglichkeiten. Haben Sie ein Makefile? Normalerweise gibt der Befehl, der das gesamte Programm assembliert (und damit den Linker aufruft), die Orte an, an denen nach Bibliotheksdateien gesucht werden soll, mit -L/dir/dir1/.../ an und kann auch Bibliotheken explizit mit -lname benennen. Sie werden feststellen, dass der tatsächliche Name libname.a oder libname.so lautet. 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 den Quellcode, um sie zu erstellen, oder eine AIX-Bibliothek?
Sie werden in der Verknüpfungsphase verwendet. .a
Dateien statisch gelinkt sind, und .so
Dateien sind sozusagen verlinkt, so dass die Bibliothek immer benötigt wird, wenn Sie die Exe-Datei ausführen.
Sie können herausfinden, wo sie gespeichert sind, indem Sie in einem der lib-Verzeichnisse nachsehen... /usr/lib
y /lib
haben die meisten von ihnen, und es gibt auch die LIBRARY_PATH
Umgebungsvariable.
Wikipedia ist eine gute Quelle für diese Informationen.
Um mehr über statische Bibliotheksdateien wie .a zu erfahren, lesen Sie Statische Bibliothek
Um mehr über gemeinsam genutzte Bibliotheksdateien wie .so zu erfahren, lesen Sie Bibliothek_(EDV)#Gemeinsame_Bibliotheken Auf dieser Seite finden Sie auch nützliche Informationen im Bereich Benennung von Dateien Abschnitt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
165 Stimmen
Eine ist die Bibliothek
a
rchiv und andere ists
haredo
bject0 Stimmen
Mögliches Duplikat von Was ist der Unterschied zwischen .so, .la und .a Bibliotheksdateien? .