web-dev-qa-db-ja.com

ディストリビューションをアップグレードせずにGCCを新しいリリースに自動的に更新する

私の理解では、G ++ 4.7.2でのC++ 11サポートは素晴らしいものではなかった(C++コードをコンパイルしようとするたびに警告が表示される、おそらくこれらの警告には十分な理由がある)ので、更新しようと思った新しい何かに。

ダウンロードクォータが多くないので、ダウンロードする量を制限したいので、本当に必要な場合を除いて、Debian安定版(Wheezy)をアップグレードしたり、build-essentialsをアップグレードしたりすることは絶対に避けたいです。

私のaptitudeリポジトリに不必要な操作を行わずに、最新のGCCリリース(またはC++ 11を完全にサポートしているもの)をapt-getするために使用できる簡単なコマンドはありますか?

Linuxのインストールプロセス全体でまだ苦労しているため、答えが既存のインストールを上書きする実行可能なコマンドの形式であった場合、私はそれを好みます。

6
quant

パッケージ管理は、「一緒に所属する」一連のパッケージを提供します。あなたのディストリビューションに属していない新しいソフトウェアのセットをインストールするようにそれをだまそうとすることは、「うまくいかない」可能性が高いです。通常発生するのは、アップグレードする必要がある後続パッケージの巨大なデイジーチェーンを取得することです(たとえば、「gccには新しいglibcが必要で、新しいglibcには新しいbinutilsが必要で、新しいbinutilsはgdbを壊すので、更新する必要があります。 」など)。

インストールされている既存のツールをそのまま保持し、独自のバージョンのgcc、llvm + clang、gdb、lldb、またはそれ以降のバージョンが必要だと思われるものをビルドする方が良い解決策だと思います。ディストリビューションツールが/ usr/{bin、lib、include、...}にインストールされる/ usr/local/{bin、lib、include、...}にインストールされるため、通常、これは問題なく機能します。古いものを使用する必要がある場合(そして、それが事実であることが判明した場合、たとえば、残念ながらプロジェクトAをコンパイルできない、またはそれ自体も新しいGCCを取得した場合)-/ usr/bin /を使用しますgccまたは$ PATHを編集して、/ usr/localを使用しないようにします。

Fedora-16をインストールしていますが、gcc 4.8.2(3月末時点で最新)とclang 3.5を使用しています。システムに付属するデフォルトのコンパイラはgcc 4.6.3とclang 2.9です。 Clang 3.5にはC++ 11互換のコンパイラが必要なので、そのプロジェクトには4.7または4.8が必要です。正常に動作します。 (しかし、新しいgccとclangは古いgdbを破壊するため、シンボルが期待どおりに機能しないため、gdbを再構築するか、アップグレードする必要があります)。

4
Mats Petersson

私は不可能だと思います、または少なくとも、価値はありません。次のことができます。

  • リポジトリーからの新しいg ++でchrootされた環境をセットアップします。 debootstrapがこれに役立ちます。
    • 利点:インストールには影響しません。自動化することもできます。
    • 短所:chrootされた環境を正しく設定するのは簡単なことではありません。時間。
  • 自分でパッケージをビルドする(バックポート)
    • 利点:高いパーソナライゼーション。ハードディスクスペースを無駄にする必要はありません
    • 短所:毎回再構築する必要があるため、自動ではありません。環境が壊れる確率は高くなります。
  • 仮想マシンの使用:
    • 長所/短所:chrootedソリューションと同じですが、両方のシステムがカーネルから完全に分離されています。
1
Braiam