557 Stimmen

Was sind .a- und .so-Dateien?

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?

165 Stimmen

Eine ist die Bibliothek a rchiv und andere ist s hared o bject

0 Stimmen

626voto

Leafy Punkte 6181

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

3 Stimmen

Bezieht sich eine dieser Fragen auf pic (positionsunabhängiger Code)?

279voto

Mario Punkte 34445

.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).

1 Stimmen

Hallo, gibt es eine Möglichkeit, .so-Dateien in C/C++-Code zu dekompilieren?

1 Stimmen

@Ancee: Sehen Sie sich diese Frage an: stackoverflow.com/questions/205059/gibt-es-einen-c-decompiler

3 Stimmen

Eine kleine .lib Datei für .dll wird als Importbibliothek bezeichnet.

13voto

gbulmer Punkte 4160

.a-Dateien sind in der Regel Bibliotheken, die statisch gelinkt werden (oder besser gesagt Archive), und
.so sind dynamisch gelinkte Bibliotheken.

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

0 Stimmen

Wie erstelle ich meine Anwendung, um .so-Dateien zu verwenden?

0 Stimmen

Es gibt viele ausgezeichnete Referenzen für die Erstellung beider Arten von Bibliotheken und die Verlinkung zu ihnen im Web. Google ist Ihr Freund.

1 Stimmen

@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?

11voto

Matt Punkte 7022

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.

3voto

user3731622 Punkte 4233

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.com

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.

Powered by:

X