Wenn Sie über eine Drittanbieter-Bibliothek sprechen, sind einige Vorteile für sie: keine Notwendigkeit, Quellcode, (möglicherweise) einfachere Installation für End-Entwickler zu veröffentlichen ... obwohl manchmal stellt sich heraus mehr von ein Ärger, vor allem, wenn es nicht richtig gemacht wurde (Verknüpfung in anderen Open-Source-Projekten, ohne Symbole zu fixieren, falsche Architekturen werden unterstützt).
Wenn Sie nur Ihren eigenen Code bedeuten - scheint wie du bist nur Kopfschmerzen für sich selbst zu schaffen. Wenn die Dateien nicht ändern, dann werden sie bereits auf der Festplatte erstellt werden (.o) und der Compiler wird sie nicht wieder aufbauen müssen, wenn Sie ein sauberes tun/alle wieder aufzubauen. Sie werden also wahrscheinlich keine Übersetzungsgeschwindigkeit erhalten.
So oder so - ja, sollte die Ausgabe gleich sein. Eine statisch verknüpfte Bibliothek ist nur eine Sammlung derselben .o-Dateien, mit denen Sie direkt verlinkt hätten.
EDIT:
Insbesondere Adressiergeschwindigkeit von .o vs .a - .a ist einfach eine Sammlung von .o-Dateien für eine einfache Verpackung während der Entwicklung. Nach der Verknüpfung ist das Ergebnis identisch. Ich habe gerade eine schnelle geistige Gesundheit Test, um zu überprüfen:
$ cat a.c
#include <stdio.h>
extern char *something();
int main()
{
printf("%s", something());
return 0;
}
$ cat b.c
char *something()
{
return "something fancy here\n";
}
$ gcc -c -o a.o a.c
$ gcc -c -o b.o b.c
$ gcc -o foo1 a.o b.o
$ ar -r b.a b.o
ar: creating archive b.a
$ gcc -o foo2 a.o b.a
$ cmp foo1 foo2
Und dort haben Sie es, identische Binärdateien durch die Verknüpfung von .o vs .a.
Es gibt eine leichte Leistung Hit, wenn Sie dynamische Bibliotheken anstelle von statischen Bibliotheken verwenden (ich glaube nur, wenn Symbole nachgeschlagen werden). Vielleicht bezog sich der andere Entwickler darauf, dass statische Bibliotheken etwas schneller wären als dynamische Bibliotheken.
Ich bin damit einverstanden, mich mit zu viel von dieser Antwort zu beantworten. Aber ich wollte nur hinzufügen, dass es wirklich darauf ankommt, wer du bist und wofür das Projekt ist. Eigene Sachen, bei denen du die Quelle besitzt und dir keine Sorgen um die gemeinsame Nutzung machen musst, dann sind statische Bibliotheken sinnlos und nur zusätzliche Arbeit für keinen Gewinn. Wenn Sie planen, zu anderen Leuten zu veröffentlichen, dann sind sie großartig, um Ihren Quellcode zu schützen. Vorkompiliert und einsatzbereit. –
Ich habe die Frage aktualisiert, um den Zusammenhang besser darzustellen. Soweit ich verstehe, ist eine statische Bibliothek mehr oder weniger die rohe Ausgabe eines Compilers, so dass es bei der Verknüpfung nicht darauf ankommen sollte, ob es sich um eine statische Bibliothek oder O-Dateien handelt, die vom Compiler erzeugt wurden. – DexM
aktualisierte Antwort, um Ihre aktualisierte Frage zu adressieren. – escrafford