Какие пакеты следует пересобрать после обновления gcc
в системе gentoo? Достаточно ли бежать
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
как предлагалось подобное для perl в этом FAQ ?
TL; DR
Я по-другому воспринимаю это как пользователь Gentoo. Хотя я согласен с подходом Петерфа «Пусть система решит», я не согласен, когда дело доходит до обновления ABI . Обновление ABI иногда является серьезным изменением в поведении. В случае GCC 4.7, изменение ABI было принятием нового стандарта C ++ 11, на что также указал Петерф.
Вот почему я пишу этот ответ. Я наркоман по стандартам. Я начал работать в веб-мире, когда было около 4 различных браузеров и множество тегов в HTML, которые поддерживались только некоторыми браузерами. В то время все эти теги увеличивали путаницу, и IMO усложнял работу. Короче говоря, C ++ был стандартизирован по той же причине, чтобы вы могли компилировать код, который я пишу, и я могу компилировать код, который вы пишете . Если мы решили не следовать стандарту, мы теряем свободу делиться.
C ++ 98 был утвержденным стандартом в течение 13 лет. C ++ 11 был ратифицирован Комитетом ISO в 2011 году и был полностью интегрирован в GCC 4.7. Смотрите текущий статус ISO и новый стандарт ISO .
Как пользователи дистрибутива на основе исходного кода, у нас есть уникальная возможность определить будущее поведение пакета, поскольку мы компилируем его перед использованием. Поэтому, чтобы подготовиться к этой возможности, я чувствую, что при обновлении до нового компилятора должны быть выполнены следующие команды:
emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system
При первом прохождении системы создается новый компилятор и его зависимости со старым компилятором. Второй проход через систему перестраивает новый компилятор и его зависимости с новым компилятором. В частности, мы хотим сделать это так, чтобы наша Build Chain использовала преимущества новых возможностей нового компилятора, если также были обновлены пакеты Build Chain ... Некоторые люди заменяют 2-ю проходную систему на мировой набор, хотя я мы считаем, что это излишне, поскольку мы не знаем, какие пакеты уже поддерживают новый стандарт, но мы хотим, чтобы наша цепочка сборки работала разумно.
Выполнение этого, по крайней мере, для системного набора, готовит нас к тестированию каждого компилируемого пакета в соответствии с новым стандартом, потому что мы используем скользящий выпуск. Таким образом, добавление -std=c++11
к CXXFLAGS
после обновления цепочки сборки позволяет нам тестировать на наличие поломок и иметь возможность отправлять сообщения об ошибках непосредственно в наш bugzilla или в апстрим фактическим разработчикам по простой причине:
Эй, твой пакет, бла-бла, ломается, используя новый стандарт C ++, и я приложил свой журнал сборки.
Я считаю это вежливостью для разработчиков, поскольку теперь у них есть время для подготовки, поскольку стандарт становится все более широко распространенным, а старый стандарт постепенно сокращается. Вообразите волнение со стороны разработчика, если он получил сотни ошибок, потому что он или она ждал, пока стандарт будет снят с производства ...
Никакой другой дистрибутив, о котором я знаю, не может использовать этот метод, так как фактические сопровождающие пакета существуют как посредники до того, как соответствующее сообщество пользователей сможет использовать исправление или обновление. У нас есть сопровождающие, но у нас также есть возможность использовать локальное дерево портежей.
Я не знаю, была ли награда объявлена, потому что вам всем нравятся мои проницательные, хорошо продуманные ответы, но, пытаясь получить награду, я постараюсь ответить на ваше проницательное, хорошо продуманное предложение награды. Прежде всего, позвольте мне в ответ сказать, что, как пользователь исходного дистрибутива, я твердо верю, что точки соединяют все, о чем вы просили в своем запросе на получение вознаграждения. Кто-то может быть отличным программистом, но имеет хреновую заботу о программном обеспечении. Точно так же есть люди, которые являются дурацкими программистами, которые очень заботятся о программном обеспечении.
До того, как я пришел сюда, я был заядлым постером на форумах Gentoo . Когда я начал приезжать сюда, я наконец понял, что у каждого есть какой-то талант, который они могут использовать. Это то, что они решили делать с этим, что вносит вклад. Некоторые из нас - великие писатели (не я), поэтому, если вы хотите внести свой вклад в какой-то проект, но вы не можете или не можете писать код, или исправлять ошибки, помните, что великие писатели могут писать отличную документацию или отличные вики-статьи ,
Стандарт существует по другой причине: в Сообществе ожидаются определенные правила от его членов . Следуйте этому заявлению и здесь. Если я отправляю исправление, исправление, усовершенствование и т. Д., А стандартов нет, исправление будет работать только в тех ситуациях, которые я считаю важными, например, если я использую компилятор whizbang 2.0, а патч построен на компиляторе whizbang 1.0, он не удастся. Поскольку усилия направлены на сообщество, оно ожидает, что в большинстве ситуаций все будет работать, поэтому вместо того, чтобы заставлять всех пользователей переходить на компилятор 2, я могу указать в стандарте:
Этот пакет разрешает обратную совместимость с Whizbang Compiler 1.0.
Таким образом, как разработчик, дурацкий кодер или нет, я знаю, что должен использовать или, по крайней мере, протестировать версию Compiler 1.0. Как пользователь, с другой стороны, я могу выбирать, что я хочу делать. Если я недоволен, я могу запросить патч, отправив сообщение об ошибке или другую крайность «Это программное обеспечение - кусок дерьма!» И ничего не делать. В любом случае, пользователь и разработчик понимают стандарт, потому что он написан.
Преодоление разрыва требует определенных действий со стороны пользователя, и для этого требуется, чтобы все, что вы просили меня и других прокомментировать, и мы должны полагаться на сообщество пользователей и их таланты во всех формах, чтобы восполнить этот пробел. Если вы решите стать одним из участников, я приветствую вас. Для тех из вас, кто хочет быть неактивным, помните, что если вы хотите что-то исправить, активным нужно ваше мнение. Поэтому я говорю вам, не стесняйтесь сообщать об ошибке или сообщать нам, что нам нужно обновить документацию, и если мы будем грубить, сообщите нам или найдем кого-то другого, пока вы не найдете свою область знаний.
Это во многом зависит от того, какой тип обновления компилятора вы сделали. Если он был существенным, то все должно быть перекомпилировано *) из-за возможных изменений в ABI компилятором. Во многих случаях в этом нет необходимости, но если ваши пакеты зависят от чего-то вроде C ++ 11, то вы можете столкнуться с проблемами - см., Например, новости Gentoo об изменении ABI в GCC 4.7 или bugzilla GCC .
*) Обратите внимание на акцент на «перекомпиляцию» - определенно нет смысла перекомпилировать (читать перестраивать) приложение Python или Perl, потому что вы изменили компилятор Си. Если только у него нет нативного компонента (что вполне возможно).
источник