Wahrscheinlich eine einfache Antwort; Ich bin ziemlich verwirrt mit der Sprache, die in der GCC-Dokumentation für einige dieser Flaggen verwendet wird!Wann bestimmte Optimierungen wie -fwhole-program und -fprofile-generate mit mehreren gemeinsam genutzten Bibliotheken zu verwenden sind
Wie auch immer, ich habe drei Bibliotheken und ein Programm, das alle diese drei verwendet. Ich kompiliere jede meiner Bibliotheken separat mit individuellen (möglicherweise) verschiedenen Gruppen von Warnflags. Allerdings kompiliere ich alle drei Bibliotheken mit dem gleichen Satz von Optimierungsflags.
Ich kompiliere dann meine Hauptprogrammverknüpfung in diesen drei Bibliotheken mit einem eigenen Satz von Warnflags und den gleichen Optimierungsflags, die während der Kompilierung der Bibliotheken verwendet wurden.
1) Muss ich die Bibliotheken mit vorhandenen Optimierungs-Flags kompilieren oder kann ich diese Flags nur beim Kompilieren des endgültigen Programms und Verknüpfen mit den Bibliotheken verwenden? Wenn letzteres, wird es dann alle oder nur einige (vermutlich das was genannt wird) des Codes in diesen Bibliotheken optimieren?
2) Ich möchte -fwhole-Programm -flto-fuse-linker-plugin und das Linker-Plugin Gold verwenden. In welchem Stadium kompiliere ich mit diesen auf ... nur die finale Kompilierung oder müssen diese Flags während der Kompilierung der Bibliotheken vorhanden sein?
3) So ziemlich wie 2) jedoch mit, -fprofile-erzeugen -fprofile-arcs und -fprofile-use. Ich verstehe, dass man zuerst ein Programm mit generate und dann mit use ausführt. Muss ich jedoch jede der Bibliotheken mit generate/use etc. oder nur dem finalen Programm kompilieren? Und wenn es nur das letzte Programm ist, wenn ich dann mit -fprofile-use kompiliere, wird es auch die Bibliotheken-Funktionalität optimieren?
Zusätzlich zu, dass - dass -flto beachten Sie mit den Shared Libraries nicht in Wechselwirkung treten, die Sie Sie verknüpfen könnte Link Zeitoptimierung durchführen, wenn die gemeinsam genutzte Bibliothek Gebäude selbst, so dass es von flto zugute kommt, wenn es gebaut wird, aber Ihre eigene ausführbare Links zu dieser gemeinsam genutzten Bibliothek können keine Optimierung der Verbindungszeit zwischen der ausführbaren Datei und den gemeinsam genutzten Bibliotheken, mit denen sie verknüpft ist, durchführen. (Aber Sie können mit statischen Bibliotheken) – nos