GCC: static library



  • Hallo,

    ich kenne mich mit den statischen Bibliotheken noch nicht so gut aus.

    Beim linken wird die Bibliothek in das Programm oder Shared Library eingearbeitet. Meine Frage hierzu ist:
    Bietet der GCC Möglichkeiten zur weiteren Optimierung des eingefügten (gelinkten) Codes?

    Gruß, Thomas



  • Eine static Library ist unter Linux eigentlich nicht mehr als ein Archiv mit allen originalen Objektdateien.
    Von daher hat der Compiler alle Möglichkeiten, die er hat wenn du direkt die Sourcedateien mitkompilierst.

    Beim linken wird die Bibliothek in das Programm oder Shared Library eingearbeitet.

    Kann man überhaupt statische Bibliotheken in dynamische linken?
    Bei meinen Versuchen in der Vergangengheit, hat sich GCC immer beschwert dass der Code in der statische Bibliothek nicht position independent ist.
    Dh. du müsstest die Bibliothek eh gleich shared kompilieren (also mit -fPIC.


  • Mod

    Der fertig übersetzter Code kann zur Linkzeit nicht weiter optimiert werden. Moderne Compiler bieten die Möglichkeit, eine Art Zwischencode zu erzeugen, der während des Linkens optimiert wird, aber das was dabei vorher erzeugt wird sind nicht Bibliotheken im klassischen Sinne.



  • Siassei schrieb:

    Bietet der GCC Möglichkeiten zur weiteren Optimierung des eingefügten (gelinkten) Codes?

    Naja, der GCC hat den Code ja nicht mehr sondern nur die Objektdateien (also Binaries). Es gibt hier noch Optimierungen (Link Time Optimization, LTO), aber dafür muss die Library mit dem Flag -flto kompiliert werden und der GCC beim linken ebenfalls mit -flto aufgerufen werden (dann schreibt er den GIMPLE Zwischencode in die Objektdateien).

    Das ganze gehört aber eher in das Compiler-Forum.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @rüdiger
    Danke für den Hinweis. Werd ich gleich mal ausprobieren.

    Wie sieht das eigentlich unter Windows aus?


  • Mod

    Siassei schrieb:

    Wie sieht das eigentlich unter Windows aus?

    Das hat nichts mit dem Betreibssystem zu tun. Das hängt alles an den Werkzeugen die zur Entwicklung benutzt werden. Der für Windows populäre Compiler von Microsoft bietet aber die gleichen Mechanismen an wie der GCC (und fast alle besseren Compiler der letzten Jahre).



  • Der GCC/MinGW/Cygwin unterstützt kein FLTO unter Windows, weil dort für ausführbare Dateien ein anderes Format verwendet wird (Windows PE statt ELF). Wie bereits gesagt wurde, geht das dort stattdessen mit dem Microsoft-Compiler. (Ich weiß nicht, was der Intel-Compiler, der Optimierungs-Primus, hierzu zu bieten hat)


  • Mod

    wxSkip schrieb:

    (Ich weiß nicht, was der Intel-Compiler, der Optimierungs-Primus, hierzu zu bieten hat)

    Hab zwar nur die Linuxversion, aber die Anleitung zu den Optimierungsoptionen ist für alle Betriebssysteme gleich. Also wohl ja.

    Soso, der GCC kann das nur mit ELF-Dateien. Wie überraschend, mal wieder was gelernt. Der Intelcompiler handhabt das mit einer Art eigenem internen Format (und liefert Ersatz für die gängigen Tools die damit nicht mehr funktionieren würden), hätte nicht gedacht, dass andere Compiler das so anders machen.



  • SeppJ schrieb:

    (und liefert Ersatz für die gängigen Tools die damit nicht mehr funktionieren würden), hätte nicht gedacht, dass andere Compiler das so anders machen.

    LTO Patch sind seid 2009 im Mingw-Zweig lt Google suche.



  • Hm... wäre eigentlich logisch, wenn das auch auf Windows funktionieren würde.
    Ich weiß nur, dass der GCC beim Kompilieren mit LTO libelf verlangt (die es natürlich nur für *n*x gibt) und sonst nicht. Ich weiß nicht genau, ob es da irgendwelche Patches gibt.


Log in to reply