debian jessie 8.1にGCC 5をインストールする方法


21

debianサーバーにgccコンパイラーのアップデートをインストールするための多くのソリューションを試しました。どれも機能しませんでした。C ++ 11の新しい機能を使用するには、コンパイラの更新が必要です。これにより、安定したlibcxx11 ABIとC ++ 11の安定したサポートが提供されるためです(こちらを参照)。具体的には、現在のコンパイラgccバージョン4.9.2(Debian 4.9.2-10)に含まれていないバージョン `GLIBCXX_3.4.21 'を取得しています。

ソリューションへのいくつかの指針が役立ちます。前もって感謝します。

私がすでに試した私の問題に関連するフォーラムへのリンク:

1 2 3(完全に関連するソリューションはubuntu用ではありませんが、debianのftpサーバーにgcc-5がまだ見つかりませんでした)


これはDebian / testingで提供されており、ご覧のとおり、ランタイムライブラリの変更が含まれています。Debianパッケージとしてこれを行う方法を誰かがアドバイスするかもしれませんが、影響を受けるパッケージの数が多いため、テスト構成への切り替えとほとんど影響はありません。
トーマスディッキー

なぜ新しいABIサポートが特に必要なのですか?Debian 8のgcc 4.9.2を使用してほとんどのC ++ 11コードをビルドできます。Debian9のリリース時に再コンパイルする必要があります。待つことができない場合、最も簡単な解決策はに切り替えることtestingですが、サーバー上ではおそらくそれは良い考えではありません(もちろんサーバーの意味によって異なります)。gcc 4.9からgcc 5への切り替えにはライブラリの移行が含まれていたため、自分でやろうとすると苦痛の世界に陥ります!
スティーブンキット

私はトーマスとステファンが言うことに同意しますが、サーバーでテストを使用するという考えについてはあまり心配していません。すべてのサーバーがバイナリとライブラリの長期的な同一性を必要とするわけではありません(debianコンテキストで「安定」とはどういう意味ですか)。スクリプトキディの先を行くために)。しかし、実稼働サーバーでテスト/不安定版を実行するには、時々起こる破損を修正するためにDebianに関する多くのスキルと知識が絶対に必要です。最初に他のマシンまたはVMでアップグレードをテストします。
cas

@casバイナリの安定性については考えていませんでしたが、むしろtesting(単独で使用する)の2つの主な欠点:パッケージが一時的に削除されることがあります(したがって、テストVMで検証したセットアップが簡単に利用できなくなる可能性があります) 、セキュリティ修正が遅れる可能性があります(そのような場合testingはありますが、大きなライブラリの移行を行っている場合は、長時間になる場合がありますtesting-security)。
スティーブンキット

1
Debianシステムで(コピーするのではなく)プログラムを再コンパイルすると、問題なく動作するはずです。
スティーブンキット

回答:


13

debian jessieにGCC 5+をインストールする必要があり、debianテスト(少なくとも6月16日)で使用できるように、apt-pinningを使用してそこにあるパッケージをインストールできます(https://wiki.debian.org/AptPreferencesを参照) 。

apt-pinningを使用してdebian jessieでのテストからGCC 5+をインストールするには:

  1. /etc/apt/sources.list.dの行を含むディレクトリにファイルを作成して、debianテストリポジトリをaptソースに追加します

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. /etc/apt/preferences.d以下を含むファイルを作成して、特定のパッケージでテストソースを使用するようにdebianに指示します。

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. aptデータベースを更新します。 sudo apt-get update

  4. テストからgccをインストールします。 sudo apt-get install -t testing gcc

    を使用-t testingすると、apt-getに、以前に構成したテストソースからgccをインストールするように指示することに注意してください。

ソースを再度コンパイルする前に、コンパイルをクリーンアップし、依存関係を再コンパイルすることを強くお勧めします。

楽しむ!


1
私はこれを試したことはありません(試したくありません)が、あなたの手順は興味深いものです。GCCほどDebianシステム全体と緊密に結びついて編まれるソフトウェアスイートは多くありません。あなたの手順は本当に機能しますか?または、解決するよりも多くの問題を引き起こしますか?好奇心が強い。
thb

1
私は実際に良い結果でそれを試しました:私は構築しているものを正常にコンパイルでき、システムは問題なく動作し続けましたが、あなたは正しいかもしれません:GCCバージョンを変更すると他のパッケージのコンパイルが壊れる可能性があります(パッケージをインストールするときにソースをコンパイルするpip) 、しかしapt、どのパッケージがGCCに依存しているかを追跡し、必要に応じて互換バージョンをインストールするので、この手順は最も侵襲性が低いと思います(覚えている限り)。
-llekn

2
ステップ2の注:/etc/apt/preferences.d/のファイルには、ドット「。」を含めないでください。ファイル名で、または「.pref」で終わります。それ以外の場合、このファイルは無視されます。値100の意味と、それが選択された理由の説明をいただければ幸いです。
ルートヴィヒシュルツェ

私が理解しているようにPin-Priority、パッケージが多くなるほど、より低い番号を持つ他のパッケージよりも優先されます。そのため、DebianのAptPrefencesページにあるようにtesting、デフォルトではPin-Priority: 900すべてのパッケージtestingがデフォルトでインストールされます。だから、それを指定するtesting必要がありますPin-Priority: 100が下がるのtesting要求された場合にターゲットを指定するとき、彼らが唯一のインストール作ったパッケージの優先度apt-get install -t testing ...
llekn

1
@ LeeK-B実際、使用Package: gccすると、システム全体がテストにアップグレードされます。ドキュメントはapt-prefences1:指定パッケージ:大きなバージョンを持っているテストからのパッケージは、デフォルトでは、彼らは標準的なもの2よりも優先されますとして、私はこれは何が起こっているかであると仮定して混乱しているgccPin-priority: 100、デフォルトの優先度を持つようにテストからなり、すべてのパッケージ(より高いです標準)を除くgcc。まさに私たちが望んだ反対のことです。この間違いを避けるために答えを更新しました
-llekn

6

前の2つの答えを組み合わせて、機能するものにするには:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

しかし!!!不安定版(unstable)からパッケージをインストールしているので、自己責任でこれを使用してください。/etc/apt/sources.list.d/unstable.listパッケージをインストールしたら削除することもできます。

可能であれば、OSを台無しにしないようにDockerの下にインストールしてください。あなたのマイレージは異なる場合があります。


4

2017-02-19現在、gcc-5はテストから削除されました。

https://tracker.debian.org/pkg/gcc-5

apt-get install gcc-5最初にこの行をルートとして実行すると、次のことができます。

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

次に、おそらく/etc/apt/preferences.dlleknの回答に従って、そのソースの優先度を変更する必要があります。


1

私は先週問題を抱えていました。2019-01-23現在、gcc-5はリポジトリから完全に削除されているようです。(https://tracker.debian.org/pkg/gcc-5を参照)

本当に必要な場合は、ソースからコンパイルできると思います。システムから依存関係を削除する方法を見つけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.