Welche Pakete sollten nach einem Upgrade gcc
auf einem Gentoo-System neu erstellt werden? Ist es ausreichend zu rennen
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
wie vorgeschlagen ähnlich für perl in dieser FAQ ?
Welche Pakete sollten nach einem Upgrade gcc
auf einem Gentoo-System neu erstellt werden? Ist es ausreichend zu rennen
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
wie vorgeschlagen ähnlich für perl in dieser FAQ ?
Antworten:
TL; DR
Als Gentoo-Benutzer sehe ich das anders. Während ich mit Peterphs Ansatz von "Let the System Decide" übereinstimme, bin ich nicht einverstanden, wenn es um ein ABI- Update geht. Ein ABI-Update ist manchmal eine wesentliche Verhaltensänderung. Im Fall von GCC 4.7 war die ABI-Änderung die Übernahme des neuen C ++ 11-Standards, auf den auch Peterph hingewiesen hat.
Hier ist, warum ich diese Antwort schreibe. Ich bin ein Standard-Junkie. Ich begann in der Webwelt, als es ungefähr 4 verschiedene Browser und eine Vielzahl von HTML-Tags gab, die nur von bestimmten Browsern unterstützt wurden. Zu der Zeit erhöhten all diese Tags die Verwirrung und IMO machte die Arbeit schwerer. C ++ wurde aus dem gleichen Grund standardisiert, damit Sie den von mir geschriebenen Code kompilieren und den von Ihnen geschriebenen Code kompilieren können . Wenn wir uns nicht an einen Standard halten, verlieren wir die Freiheit zu teilen.
C ++ 98 ist seit 13 Jahren der anerkannte Standard. C ++ 11 wurde 2011 vom ISO-Komitee ratifiziert und vollständig in GCC 4.7 integriert. Zeigen Sie den aktuellen ISO-Status und den neuen ISO-Standard an .
Als Benutzer einer quellbasierten Distribution haben wir die einzigartige Möglichkeit, das zukünftige Verhalten eines Pakets zu gestalten, da wir es kompilieren, bevor wir es verwenden. Um sich auf diese Gelegenheit vorzubereiten, sollten meines Erachtens beim Aktualisieren auf den neuen Compiler die folgenden Befehle ausgeführt werden:
emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system
Das erste Pass-Through-System erstellt den neuen Compiler und seine Abhängigkeiten mit dem alten Compiler. Beim zweiten Durchlauf des Systems werden der neue Compiler und seine Abhängigkeiten mit dem neuen Compiler neu erstellt. Insbesondere möchten wir dies tun, damit unsere Build Chain die neuen Funktionen des neuen Compilers nutzt, wenn die Build Chain-Pakete ebenfalls aktualisiert wurden ... Einige Leute ersetzen das 2. Pass-Through-System durch das World-Set, obwohl ich Das ist übertrieben, da wir nicht wissen, welche Pakete den neuen Standard bereits unterstützen, aber wir möchten, dass sich unsere Build-Kette vernünftig verhält.
Wenn wir dies zumindest für die Systemgruppe tun, sind wir bereit, jedes Paket, das wir kompilieren, anhand des neuen Standards zu testen, da wir eine fortlaufende Version verwenden. Auf diese Weise, das Hinzufügen -std=c++11
zu , CXXFLAGS
nachdem die Build - Kette Aktualisierung ermöglicht es uns, Test auf Bruch, und in der Lage sein , Fehler zu unterbreiten direkt entweder unser Bugzilla oder vor dem eigentlichen Entwickler aus dem einfachen Grunde:
Hey, dein Paket bla bla bricht mit dem neuen C ++ - Standard und ich habe mein Build-Protokoll angehängt.
Ich betrachte dies als eine Höflichkeit für die Entwickler, da sie jetzt Zeit haben, sich vorzubereiten, da der Standard weiter verbreitet wird und der alte Standard ausläuft. Stellen Sie sich die Unruhe des Entwicklers vor, wenn er Hunderte von Fehlern erhalten hat, weil er oder sie gewartet hat, bis der Standard auslief ...
Keine andere mir bekannte Distribution kann diese Methode verwenden, da die eigentlichen Paketbetreuer als Zwischenhändler existieren, bevor ein Patch oder Update von der jeweiligen Benutzergemeinschaft verwendet werden kann. Wir haben zwar Betreuer, aber wir können auch einen lokalen Portage-Baum verwenden.
Ich weiß nicht, ob das Kopfgeld gebucht wurde, weil Sie alle meine aufschlussreichen, gut durchdachten Antworten mögen, aber bei einem Versuch, das Kopfgeld zu erhalten, werde ich versuchen, Ihr aufschlussreiches, gut durchdachtes Kopfgeldangebot zu beantworten. Lassen Sie mich zunächst als Antwort darauf sagen, dass ich als Benutzer einer quellbasierten Distribution fest davon überzeugt bin, dass die Verbindung zwischen den Punkten alles ist, wonach Sie in Ihrer Kopfgeldanfrage gefragt haben. Jemand kann ein großartiger Programmierer sein, hat aber eine beschissene Pflege für Software. Ebenso gibt es Leute, die beschissene Programmierer sind, die große Sorgfalt für Software haben.
Bevor ich hierher kam, war ich ein begeisterter Poster bei den Gentoo-Foren . Als ich hierher kam, wurde mir endlich klar, dass jeder ein gewisses Maß an Talent hat, das er einsetzen kann. Es ist das, was sie damit machen, was den beitragenden Unterschied ausmacht. Einige von uns sind großartige Autoren (nicht ich). Wenn Sie also zu einem Projekt beitragen möchten, aber keinen Code schreiben oder keinen Code schreiben oder Fehler beheben können, denken Sie daran, dass großartige Autoren großartige Dokumentationen oder großartige Wiki-Artikel schreiben können .
Der Standard gibt es aus einem anderen Grund: In einer Community werden bestimmte Regeln von ihren Mitgliedern erwartet . Befolgen Sie diese Aussage auch hier. Wenn ich ein Update, einen Patch, eine Verbesserung usw. einreiche und es keine Standards gibt, funktioniert der Patch nur in den Situationen, die ich für wichtig halte, dh wenn ich den Whizbang-Compiler 2.0 verwende und der Patch gegen den Whizbang-Compiler 1.0 erstellt wurde wird versagen. Da es sich um eine Community handelt, erwartet die Community, dass in den meisten Situationen alles funktioniert. Anstatt alle Benutzer zu einem Upgrade auf Compiler 2 zu zwingen, kann ich einen Standard festlegen:
Dieses Paket ermöglicht die Abwärtskompatibilität mit Whizbang Compiler 1.0
Auf diese Weise weiß ich als Entwickler, beschissener Codierer oder nicht, dass ich Compiler Version 1.0 verwenden oder zumindest testen muss. Andererseits kann ich als Benutzer wählen, was ich tun möchte. Wenn ich unglücklich bin, kann ich einen Patch anfordern, indem ich einen Fehler einreiche oder das andere Extrem von "Diese Software ist ein Miststück!" Und nichts tun. Unabhängig davon verstehen der Benutzer und der Entwickler den Standard, weil er geschrieben wurde.
Die Überbrückung der Lücke erfordert Maßnahmen in irgendeiner Form seitens eines Benutzers. Dazu müssen alle Dinge, die Sie von mir und anderen gefordert haben, kommentiert werden, und wir müssen uns auf die Benutzergemeinschaft und deren Talente in allen Formen verlassen, um diese Lücke zu schließen. Wenn Sie sich dafür entscheiden, einer der beitragenden Benutzer zu sein, begrüße ich Sie. Denken Sie für diejenigen von Ihnen, die sich dafür entscheiden, inaktiv zu sein, daran, dass, wenn Sie eine Korrektur wünschen, die aktiven Ihre Eingabe benötigen. Ich sage Ihnen also, scheuen Sie sich nicht, einen Fehler einzureichen, oder sagen Sie uns, dass wir die Dokumentation aktualisieren müssen. Wenn wir unhöflich sind, sagen Sie es uns oder suchen Sie jemanden, bis Sie Ihr Fachgebiet gefunden haben.
Es hängt stark davon ab, welche Art von Compiler-Upgrade Sie durchgeführt haben. Wenn es erheblich war, sollte wegen möglicher Änderungen in ABI durch den Compiler alles neu kompiliert werden *) . In vielen Fällen ist dies nicht notwendig, aber wenn Ihre Pakete von etwas wie C ++ 11 abhängen, könnten Sie auf Probleme stoßen - siehe z. B. die Gentoo-Nachrichten über ABI-Änderungen in GCC 4.7 oder GCC Bugzilla .
*) Beachten Sie die Betonung auf "neu kompiliert" - es ist definitiv nicht sinnvoll, eine Python- oder Perl-Anwendung neu zu kompilieren (durch Lesen neu zu erstellen), da Sie einen C-Compiler geändert haben. Es sei denn, es hat auch eine native Komponente (die es auch kann).