Betrachten Sie diesen Code:Warum eine .a-Datei von .o für die statische Verknüpfung erstellen?
eins.c:
#include <stdio.h>
int one() {
printf("one!\n");
return 1;
}
zwei.c:
#include <stdio.h>
int two() {
printf("two!\n");
return 2;
}
prog.c
#include <stdio.h>
int one();
int two();
int main(int argc, char *argv[])
{
one();
two();
return 0;
}
Ich möchte zusammen, um diese Programme zu verknüpfen. Also ich mache das:
gcc -c -o one.o one.c
gcc -c -o two.o two.c
gcc -o a.out prog.c one.o two.o
Das funktioniert ganz gut.
Oder ich könnte eine statische Bibliothek erstellen:
ar rcs libone.a one.o
ar rcs libtwo.a two.o
gcc prog.c libone.a libtwo.a
gcc -L. prog.c -lone -ltwo
Also meine Frage ist: Warum würde ich die zweite Version verwenden - das eine, wo ich eine „.a“ Dateien erstellt - anstatt Verknüpfung meines“. o "Dateien? Beide scheinen statisch miteinander zu verknüpfen, gibt es also einen Vorteil oder einen architektonischen Unterschied zwischen den beiden?
Das Ergebnis ist normalerweise sehr unterschiedlich. Es ist zufällig dasselbe in diesem erfundenen Beispiel. – UncleO