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?
Was sind .a- und .so-Dateien?
Dunc
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.
eine ist Bibliothek
a
Archiv und andere ists
gehassto
Objekt– 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