gcc
gentooシステムでアップグレードした後、どのパッケージを再構築する必要がありますか?実行するのに十分ですか
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
このFAQのperlで同様に提案されているように?
gcc
gentooシステムでアップグレードした後、どのパッケージを再構築する必要がありますか?実行するのに十分ですか
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
このFAQのperlで同様に提案されているように?
回答:
TL; DR
私はGentooユーザーとしてこれについて異なる見解を持っています。「Let the System Decide」というpeterphのアプローチには同意しますが、ABIアップデートに関しては同意しません。ABI更新は、動作の大きな変化である場合があります。GCC 4.7の場合、ABIの変更は新しいC ++ 11標準の採用であり、これもpeterphが指摘しました。
これが私がこの答えを書いた理由です。私は標準中毒者です。約4種類のブラウザーと、特定のブラウザーでのみサポートされているHTMLのタグが多数あったときに、私はWebの世界で始めました。当時、これらのタグはすべて混乱を招き、IMOは作業を難しくしていました。私が書いたコードをコンパイルできるように、つまり、あなたが書いたコードをコンパイルできるように、C ++はこれと同じ理由で標準化されています。標準に従わないことを選択した場合、共有の自由が失われます。
C ++ 98は13年間承認された標準です。C ++ 11は2011年にISO委員会によって承認され、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
システムの最初のパスでは、新しいコンパイラが構築され、古いコンパイラとの依存関係が構築されます。システムの2回目のパスでは、新しいコンパイラが再構築され、新しいコンパイラとの依存関係が再構築されます。具体的には、私たちは私たちのようにこれをしたいビルド・チェーンは、ビルドチェーンパッケージは一部の人々は世界がセットされたシステムを介して第2パスを交換...も更新されている場合は、私が、新しいコンパイラの新機能を活用していますどのパッケージが新しい標準を既にサポートしているかわからないので、これは過剰であることがわかりますが、ビルドチェーンが正常に動作するようにします。
少なくともシステムセットに対してこれを行うと、ローリングリリースを使用するため、新しい標準に対してコンパイルするすべてのパッケージをテストする準備ができます。このように、ビルドチェーンの更新後にを追加-std=c++11
するCXXFLAGS
と、破損のテストが可能になり、バグを次の理由でバグジラまたは実際の開発者に直接送信できます。
ねえ、あなたのパッケージは何とか新しいC ++標準を使用すると壊れます。ビルドログを添付しました。
標準がより広く採用されるようになり、古い標準が段階的に廃止されるにつれて、開発者は準備する時間があるので、これは開発者への礼儀だと思います。開発者が何百ものバグを受け取った場合、標準が段階的に廃止されるまで待っていたため、開発者側の騒ぎを想像してください...
実際のパッケージメンテナーは、それぞれのユーザーコミュニティがパッチまたはアップデートを使用する前に仲介者として存在するため、私が知っている他のディストリビューションはこの方法を使用できません。メンテナーはいますが、ローカルのPortageツリーを使用することもできます。
あなたが私の洞察に満ちた、よく考えられた答えを好むので、私は報奨金が掲載されたかどうかは知りませんが、報奨金の試みで、私はあなたの洞察に満ちた、よく考えられた報奨金の提供に答えようとします。まず、ソースベースのディストリビューションのユーザーとして、ドットをつなぐものは賞金請求で求めたものすべてであると固く信じています。優れたコーダーになれる人もいますが、ソフトウェアには気を配っています。同様に、ソフトウェアに細心の注意を払っているくだらないコーダーである人々がいます。
ここに来る前は、Gentoo Forumsで熱心なポスターでした。私がついにここに来たとき、誰もがある程度使える才能があることに気づきました。貢献の違いを生むのは、彼らがそれを選択することです。私たちの中には偉大な作家(私ではない)がいるので、プロジェクトに貢献したいが、コードを書いたり、バグを修正したりできない場合、偉大な作家は素晴らしいドキュメントや素晴らしいWiki記事を書くことができることを忘れないでください。
規格には別の理由があります。コミュニティでは、そのメンバーに特定のルールが期待されます。ここでもその声明に従ってください。修正、パッチ、拡張などを提出し、標準がない場合、パッチは重要だと思う状況でのみ機能します。つまり、whizbangコンパイラ2.0を使用していて、パッチがwhizbangコンパイラ1.0に対してビルドされている場合、失敗します。努力はコミュニティのためであるため、コミュニティはほとんどの状況ですべてが機能することを期待しているため、すべてのユーザーにコンパイラ2へのアップグレードを強制する代わりに、標準を規定できます。
このパッケージは、Whizbang Compiler 1.0との後方互換性を許可します。
このようにして、開発者として、安っぽいコーダーであろうとなかろうと、コンパイラバージョン1.0を使用するか、少なくともテストする必要があることを知っています。一方、ユーザーとして、やりたいことを選択できます。私が不満なら、バグを提出するか、「このソフトウェアはがらくただ!」という極端なパッチを要求して、何もしません。とにかく、ユーザーと開発者は、標準が作成されているため、標準を理解しています。
ギャップを埋めるには、ユーザー側で何らかの形で行動する必要があります。それは、私や他の人にコメントを求めるものすべてを必要とし、すべてのフォームのユーザーコミュニティとタレントがそのギャップを埋める必要があります。貢献しているユーザーの1人になることを選択した場合、私はあなたを称賛します。非アクティブにすることを選択した場合、何か修正したい場合は、アクティブなユーザーがあなたの入力を必要とすることを覚えておいてください。ですから、バグを提出したり、ドキュメントを更新する必要があることを恥ずかしがったりしないでください。あなたが専門分野を見つけるまで、私たちが失礼なことを教えたり、他の人を見つけたりします。
コンパイラのアップグレードの種類に大きく依存します。大幅な場合は、コンパイラによるABIの変更の可能性があるため、すべてを再コンパイルする必要があります*)。多くの場合、それは必要ありませんが、パッケージがC ++ 11のようなものに依存している場合、問題が発生する可能性があります。たとえば、GCC 4.7またはGCC bugzillaのABI変更に関するGentooニュースを参照してください。
*)「再コンパイル」に重点を置いていることに注意してください-Cコンパイラを変更したため、PythonまたはPerlアプリケーションを再コンパイル(読み取り再構築)することはあまり意味がありません。ネイティブコンポーネントも含まれている場合を除きます(これは可能性があります)。