Które pakiety należy odbudować po aktualizacji gcc
w systemie Gentoo? Czy wystarczy uruchomić
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
jak sugerowano podobnie dla Perla w tym FAQ ?
Które pakiety należy odbudować po aktualizacji gcc
w systemie Gentoo? Czy wystarczy uruchomić
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
jak sugerowano podobnie dla Perla w tym FAQ ?
Odpowiedzi:
TL; DR
Mam inne zdanie na ten temat jako użytkownik Gentoo. Chociaż zgadzam się z podejściem Petera do „Niech system decyduje”, nie zgadzam się, jeśli chodzi o aktualizację ABI . Aktualizacja ABI jest czasem poważną zmianą w zachowaniu. W przypadku GCC 4.7 zmiana ABI polegała na przyjęciu nowego standardu C ++ 11, na co również zwrócił uwagę Peter.
Oto dlaczego piszę tę odpowiedź. Jestem ćpunem standardowym. Zacząłem w świecie internetowym, kiedy istniało około 4 różnych przeglądarek i mnóstwo tagów w HTML, które były obsługiwane tylko przez niektóre przeglądarki. W tym czasie wszystkie te tagi zwiększyły zamieszanie, a IMO utrudniło pracę. C ++ ujednolicono z tego samego powodu, krótko mówiąc, abyś mógł skompilować kod, który piszę, i mogę skompilować kod, który piszesz . Jeśli zdecydujemy się nie przestrzegać standardu, tracimy swobodę udostępniania.
C ++ 98 jest zatwierdzonym standardem od 13 lat. C ++ 11 został ratyfikowany przez Komitet ISO w 2011 r. I został całkowicie zintegrowany z GCC 4.7. Zobacz aktualny status ISO i nowy standard ISO .
Jako użytkownicy dystrybucji opartej na źródłach mamy wyjątkową możliwość kształtowania przyszłego zachowania pakietu, ponieważ kompilujemy go przed użyciem. W związku z tym, aby przygotować się na tę okazję, uważam, że podczas aktualizacji do nowego kompilatora należy uruchomić następujące polecenia:
emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system
System pierwszego przejścia buduje nowy kompilator i jego zależności ze starym kompilatorem. Drugie przejście przez system przebudowuje nowy kompilator i jego zależności od nowego kompilatora. W szczególności chcemy to zrobić, aby nasz Build Chain korzystał z nowych funkcji nowego kompilatora, jeśli pakiety Build Chain zostały również zaktualizowane ... Niektórzy ludzie zamieniają system drugiego przejścia na zestaw światowy, chociaż ja uważamy, że to przesada, ponieważ nie wiemy, które pakiety już obsługują nowy standard, ale chcemy, aby nasz łańcuch kompilacji zachowywał się rozsądnie.
Robiąc to przynajmniej w zestawie systemowym, przygotowuje nas do przetestowania każdego pakietu, który kompilujemy pod kątem nowego standardu, ponieważ korzystamy z nowej wersji. W ten sposób dodanie -std=c++11
do CXXFLAGS
po aktualizacji łańcucha kompilacji pozwala nam przetestować pod kątem awarii i być w stanie przesyłać błędy bezpośrednio do naszej Bugzilli lub do rzeczywistych programistów z prostego powodu:
Hej, twój pakiet bla bla psuje się przy użyciu nowego standardu C ++, a ja załączyłem mój dziennik kompilacji.
Uważam to za uprzejmość dla programistów, ponieważ mają teraz czas na przygotowanie się, ponieważ standard staje się coraz powszechniej stosowany, a stary standard jest wycofywany. Wyobraź sobie zamieszanie ze strony programisty, jeśli otrzymał setki błędów, ponieważ czekał, aż standard zostanie wycofany ...
Żadna inna znana mi dystrybucja nie może użyć tej metody, ponieważ faktyczni opiekunowie pakietów istnieją jako pośrednicy, zanim łata lub aktualizacja mogą być używane przez odpowiednią społeczność użytkowników. Mamy opiekunów, ale mamy również możliwość korzystania z lokalnego drzewa portage.
Nie wiem, czy nagroda została wysłana, ponieważ wszyscy lubicie moje wnikliwe, przemyślane odpowiedzi, ale próbując zdobyć nagrodę, postaram się odpowiedzieć na waszą wnikliwą, przemyślaną ofertę nagród. Po pierwsze, powiem w odpowiedzi, że jako użytkownik dystrybucji opartej na źródłach mocno wierzę, że to, co łączy kropki, to wszystkie rzeczy, o które prosiłeś w swojej prośbie o nagrodę. Ktoś może być świetnym programistą, ale ma kiepską opiekę nad oprogramowaniem. W ten sam sposób są ludzie, którzy są kiepskimi programistami, którzy dbają o oprogramowanie.
Zanim tu przybyłem, byłem zapalonym plakatem na Forum Gentoo . W końcu zdałem sobie sprawę, kiedy zacząłem tu przyjeżdżać, że każdy ma pewien talent, z którego może skorzystać. To, co postanowili z tym zrobić, robi różnicę. Niektórzy z nas są świetnymi pisarzami (nie ja), więc jeśli chcesz przyczynić się do jakiegoś projektu, ale nie możesz lub nie możesz pisać kodu lub naprawiać błędów, pamiętaj, że wspaniali pisarze mogą pisać świetną dokumentację lub świetne artykuły na Wiki .
Standard istnieje z innego powodu: we Wspólnocie oczekuje się pewnych zasad od jej członków . Śledź również to stwierdzenie tutaj. Jeśli prześlę poprawkę, poprawkę, rozszerzenie itp. I nie ma żadnych standardów, łatka będzie działać tylko w sytuacjach, które uważam za ważne, tj. Jeśli używam kompilatora Whizbang 2.0, a łatka jest zbudowana na kompilatorze Whizbang 1.0, to zawiedzie. Ponieważ wysiłek włożony jest w społeczność, społeczność oczekuje, że wszystko zadziała w większości sytuacji, więc zamiast zmuszać wszystkich użytkowników do aktualizacji do kompilatora 2, mogę określić w standardzie:
Ten pakiet pozwala na kompatybilność wsteczną z Whizbang Compiler 1.0
W ten sposób, jako programista, gówniany programista, czy nie, wiem, że muszę użyć lub przynajmniej przetestować kompilator w wersji 1.0. Z drugiej strony jako użytkownik mogę wybrać, co chcę zrobić. Jeśli jestem niezadowolony, mogę poprosić o łatkę, zgłaszając błąd lub inną skrajność „To oprogramowanie to bzdura!” I nic nie rób. Niezależnie od tego, użytkownik i programista rozumieją standard, ponieważ został napisany.
Wypełnianie luki wymaga działania jakiejś formy ze strony użytkownika, a to wymaga wszystkich rzeczy, o które prosiłeś mnie i innych do skomentowania, i musimy polegać na społeczności użytkowników i ich talentach wszystkich form wypełniających tę lukę. Jeśli zdecydujesz się być jednym z użytkowników, dziękuję ci. Dla tych z was, którzy zdecydują się być nieaktywni, pamiętajcie, że jeśli chcecie coś naprawić, aktywni potrzebują waszego wkładu. Mówię ci więc, nie wstydź się zgłaszać błędu lub informować nas, że musimy zaktualizować dokumentację, a jeśli będziemy niegrzeczni, powiedz nam lub znajdź kogoś innego, dopóki nie znajdziesz swojej specjalizacji.
Wiele zależy od tego, jaki rodzaj aktualizacji kompilatora zrobiłeś. Jeśli był znaczny, wszystko powinno zostać ponownie skompilowane *) z powodu możliwych zmian w ABI kompilatora. W wielu przypadkach nie będzie to konieczne, ale jeśli twoje pakiety zależą od czegoś takiego jak C ++ 11, możesz napotkać problemy - zobacz np. Wiadomości Gentoo o zmianie ABI w GCC 4.7 lub Bugzilli GCC .
*) Zwróć uwagę na nacisk na „rekompilację” - zdecydowanie nie ma sensu rekompilować (czytać przebudować) aplikacji Python lub Perl, ponieważ zmieniłeś kompilator C. Chyba że ma również komponent natywny (co może również).