2016-07-25 2 views
0

Ich arbeite an einem System mit Hunderten von executables. Jede ausführbare Datei ist vollständig in verschiedenen .a-Bibliotheken statisch verknüpft. Shared Libraries sind momentan keine Option. Ein vollständiger Wiederaufbau ist ziemlich langsam. Flaschenhals scheint zu verlinken, da jede ausführbare Datei neu verknüpft werden muss und es Hunderte gibt.Möglich Bibliotheken in einer Bibliothek zu verknüpfen und interne Funktionsaufrufe aufzulösen?

Ist es möglich, eine "Master" -Bibliothek aller Bibliotheken zu erstellen, in denen interne Funktionsaufrufe aufgelöst werden, dann diese Master-Bibliothek zu verwenden, wenn die Binärdateien verknüpft werden? Die Idee wäre, dass die Zeit aufgrund interner Bibliotheksaufrufe, die bereits gelöst wurden, gespeichert wird. (Es gibt viele Anrufe zwischen den Bibliotheken).

Wir verwenden nicht clang und ich glaube nicht, dass inkrementelle Verknüpfung eine Option ist.

Antwort

2

Ist es möglich, eine "Master" Bibliothek

Sure zu erstellen: ld -r -o master.o --whole-archive libfoo.a libbar.a ... sollte es tun.

Es ist sehr wahrscheinlich, dass jede Ihrer Binärdateien größer wird (explanation).

Auch, wenn Sie ELF verwenden, können Sie deutlich schnellere Links mit der (neuen) Gold linker erhalten.

Schließlich, wenn Sie auf einer leistungsfähigen Maschine mit viel RAM (wie Sie sollten) bauen, sollte make -j12 oder noch höher laufen Geschwindigkeit durch die Ausführung vieler Links parallel beschleunigen. Dies erfordert korrekte Makefile Struktur und korrekte Abhängigkeiten (die Sie sollten haben sowieso für die Richtigkeit Ihrer Builds).

Verwandte Themen