Dies ist teilweise ein historisches Problem. Früher gab es nur statische Bibliotheken. Sie wurden statisch mit jeder vom System kompilierten Binärdatei verknüpft. Dies stellte jedoch unter anderem einen Wartungs-Albtraum dar, der erforderte, dass alle verwendenden Pakete neu kompiliert wurden, wenn eine Bibliothek gepatcht oder geändert wurde.
Dann kam gemeinsame Bibliotheken zur Behebung dieser Probleme. Nun zu Ihrer Frage: Erstens gibt es einige signifikante Optimierungen, die in einer statisch verknüpften Bibliothek stattfinden können, die bei dynamischen nicht möglich ist. Selbst wenn man dynamische Bibliotheken in statische Bibliotheken umwandeln würde, wäre es wahrscheinlich weniger effizient als Code statisch zuerst kompiliert.
Zweitens verwenden die meisten modernen Systeme sowieso nur gemeinsam genutzte Bibliotheken, so dass es kein großes Problem gibt, Dinge werden nur einmal als gemeinsame Bibliothek kompiliert.
Als eine leichte beiseite, aber immer noch relevant, könnten Sie in prelinking suchen. Ein Schritt, der einen Teil des Start-Up-Overhead wegnimmt (obwohl er nicht immer die gleiche Leistung wie eine statische Verbindung erzielt) und Software, die dynamisch in Bibliotheken verknüpft ist, schneller starten lässt.
Diese Antwort erwähnt, dass es ratsam ist zweimal zu kompilieren den PIC-Overhead für statische Bibliotheken zu vermeiden: http://stackoverflow.com/questions/4863791/creating-both-static-and-shared-c-libraries – PSkocik
Bibliothek Aromen sind ein Attribut des Binärformats, das vom Betriebssystem unterstützt wird. Weder C noch C++ wissen etwas über sie und auch nicht über die Bibliotheken selbst. –
Es gibt keine Sprache C/C++. Und die Frage ist nicht spezifisch für einen PL. – Olaf