Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:gentoo-spezifisch:gcc

Dies ist eine alte Version des Dokuments!


GCC

The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking.

1. Einstellungen (make.conf)

1.1 CFLAGS

  • safe:
CFLAGS="-O2 -march=native -pipe"


  • Für graphite muss USE='graphite' gesetzt sein:
CFLAGS="-floop-interchange -floop-strip-mine -floop-block"


  • Für lto muss USE='lto' gesetzt sein (siehe auch LDFLAGS weiter unten):
CFLAGS="-flto"


  • auf ~amd64 mit GCC-4.5 Anfang 2011 stabil, mit GCC-4.6 instabil:
CFLAGS="-O2 -march=native -pipe 
-ftree-vectorize
-floop-interchange -floop-strip-mine -floop-block
-ftree-loop-linear"


  • Empfehlung für ~amd64 und GCC-4.6:
USE="graphite"
CFLAGS="-O2 -march=native -pipe -floop-interchange -floop-strip-mine -floop-block"


alles mit

CXXFLAGS="${CFLAGS}"

1.2 LDFLAGS

  • safe:
LDFLAGS="${LDFLAGS} -Wl,-z,now -Wl,--hash-style=gnu -Wl,--enable-new-dtags"


  • Für lto:
LDFLAGS="${LDFLAGS} -flto -fwhole-program"


Allerdings ist lto mit GCC-4.5 experimentell und zumindest im 3Q-2010 nicht zu gebrauchen, „-fwhole-program“ macht zusätzlich Probleme. Bei der Nutzung von lto muss unbestätigten Quellen nach mit sehr großen Binaries gerechnet werden, die oft sämtliche Vorteile kompensieren. Eventuell ist lto daher nur selektiv für einzelne Programme sinnvoll.

2. Graphite

2.1 Einleitung

Was ist graphite?

2.2 Installation

Zunächst

USE="graphite"

setzen und gcc neu kompilieren.

Anschließend müssen

dev-libs/ppl
dev-libs/cloog-ppl
sys-devel/gcc

mit entsprechenden Flags

CFLAGS="-floop-interchange -floop-strip-mine -floop-block"

neu kompiliert werden. Nun sollte der komplette Toolchain sowie wichtige Systembibliotheken neu erstellt werden:

# emerge -eav1 @system

Abschließend kann auch @world komplett neu gebaut werden, dies kann aber auch sukzessive mit den normales Updates geschehen.

3. GCC Upgrade

3.1 Upgrade

Zunächst neuen GCC installieren und mit

# gcc-config 

aktivieren. Anschließend @sytem und @world neu kompilieren:

# emerge -eav system
# emerge -eav world

Eventuell

# emerge --resume

oder

# emerge --resume --skip-first

verwenden.

3.2 Nacharbeit

  • Wenn Fehler wie libtool: link: `/usr/lib/gcc-lib/i686-pc-linux-gnu/4.5.2/libstdc++.la' is not a valid libtool archiv auftreten, kann dies mit fix_libtool_files.sh und der Angabe der alten GCC-Version behoben werden:
# fix_libtool_files.sh 4.5.2
  • Falls error: /usr/bin/gcc-config: line 632: /etc/env.d/gcc/i686-pc-linux-gnu-3.3.5: No such file or directory gemeldet wird, kann versucht werden /etc/env.d/gcc/config-i686-pc-linux-gnu zu löschen. Anschließend muss
# gcc-config
und
# source /etc/profile

ausgeführt werden.

3.3 Aufräumen

# emerge -aC <sys-devel/gcc-IHRE-NEUE-GCC-VERSION

4. Aktuelles

4.1 GCC 4.6

4.1.1 Allgemeines

  • graphite ist insofern „buggy“, als dass sich bei eingeschalteter graphite-Unterstützung des toolchains keine (oder kaum) Pakte mehr mit der alten Version 4.5 kompilieren lassen. Solange diese als „Backup-Lösung“ genutzt werden soll, dürfen während ihrer Nutzung die entsprechenden CFLAGS nicht aktiviert sein.
  • Snapshot vom 12.03. kompiliert nicht, u.U. wegen graphite-CFLAGS, vielleicht auch nur wegen dem USE-Flag.

4.1.2 Spezielle Pakete

Auf meinem ~amd64-System (Stand: 14.03.2011)…

nicht kompilierbare Pakete:

  • verifiziert
    • sys-devel/dev86-0.16.18
      • Nutze erstmal GCC-4.5
    • www-client/chromium-11.0.696.3
      • Nutze erstmal GCC-4.5
    • app-emulation/virtualbox-4.0.4
      • ./configure lässt nur bi 4.X, X ⇐ 5 zu
    • app-office/libreoffice-3.3.1
      • Nutze erstmal GCC-4.5
  • unverifiziert
    • media-libs/gst-plugins-good-0.10.23
      • Workaround: Downgrade zu media-libs/gst-plugins-good-0.10.22
    • media-libs/gst-plugins-bad-0.10.19
      • media-libs/gst-plugins-bad-0.10.21 kompiliert erfolgreich


fehlerhafte Pakete:

  • verifiziert
    • app-portage/eix-0.22.8:
      • Speicherzugriffsfehler
      • Workaround: USE=„-strong-optimization“
  • unverifiziert
    • Speicherzugriffsfehler bei *.wmv-Dateien
      • media-libs/gst-plugins-base-0.10.32
      • media-video/ffmpeg-0.6_p25767
      • media-plugins/gst-plugins-ffmpeg-0.10.11-r1
        • Vermutlich durch Downgrade auf media-libs/gst-plugins-good-0.10.22 behoben
    • www-client/chromium
      • tab_strip_gtk.cc(1180)] Not implemented reached in virtual void TabStripGtk::StopAllHighlighting() Speicherzugriffsfehler


linux/gentoo-spezifisch/gcc.1300187323.txt.gz · Zuletzt geändert: 09.07.2013 21:32 (Externe Bearbeitung)