Kali Linuxに特定のバージョンのGCCをインストールする方法


8

この質問は、Googleで簡単に見つけられるいくつかの質問やその他の場所で適切に対処されているようですが、以下で説明する理由により、解決策は満足のいくものではありません。しかし、完了のために、いくつかの関連リンクを含めました。

/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -some-package / 428778 /ubuntu/26498/choose-gcc-and-g-version ...

その他。

ただし、この質問は、Galiの非常に特定のバージョンをKali Linuxにインストールすることに関するものです。これは、特定のパッケージとしては容易に入手できないようです。特に、問題はバージョン6.3.0のインストール方法に関するものです特定のプログラムをコンパイルするにはこのバージョンが必要なので、https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/

(おまけの質問として、別のバージョンのGCCを使用せずにこの特定の問題を修正するより健全な方法がある場合は、お気軽に回答してください。ただし、この質問は一般的なものであり、関係なくそれを行う方法を知りたいです上記のプログラムを正しくリンクさせる方法)

gccなどのパッケージのインストールに使用できるバージョンは、次のようにして決定できます。

apt-cache showpkg gcc

使用可能なバージョンを「バージョン:」の下に一覧表示します。例:

4:7.2.0-1d1
4:4.9.2-2

インストールは発行と同じくらい簡単です

apt-get install gcc:4:4.9.2-2

これにより、古いバージョン4:4.9.2-2がインストールされます。これは、7.2.0-1d1のインストールが存在する場合、それを(私は信じて)上書きするだけです。

バージョン4:4.9.2-2を使用できるようにするdeb http://old.kali.org/kali sana main non-free contribには、/etc/apt/sources.listファイルに追加して を実行する必要がありましたapt-get update

ただし、必要なバージョンがリストにない場合はどうなりますか?

私はさまざまなソース、たとえばhttp://snapshot.debian.org/や、Google検索からのその他のさまざまな質問やウェブサイトで見つけたものなどを試してい ます。

それらのほとんどは、例えば次のように、私に無視またはエラーを与えます

Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease

これが機能する場合でも、特定のバージョンをインストールすることは非常に悪いアプローチのようです。任意のソースを追加すると、特定のバージョンが必要にならない場合があるためです。

snapshot.debian.orgでgccを検索すると、非常に古いバージョンのみが表示されます。http//snapshot.debian.org/package/gcc/

私は最終的にこのアプローチに不満を抱き、ソースtarballからGCC 6.3.0をコンパイルしました。コンパイルは成功しましたが、それをインストールする方法に直面しました。私は、実行中には慎重だmake install、私はそれが改ざんされます恐れるようaptdpkg、おそらくシステムを破ります。

代わりに、ビルドディレクトリから直接実行しようとしました。PATHの最初のエントリとしてビルドディレクトリを追加しようとしましたが、機能しませんでした。次に、名前を変更/usr/bin/gccして/usr/bin/gcc、gcc-6.3.0実行可能ファイルが存在する場所へのシンボリックリンクを作成しようとしました。これにより、次の問題が発生します。

cc: error trying to exec 'cc1': execvp: No such file or directory, which

これは私のPATHの別のエントリで修正されました。

次に、このエラーが発生します:

/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory

私が想定しているのは、のエントリがないためです/usr/lib/gcc/x86_64-linux-gnu。6から6.3.0のシンボリックリンクを作成しようとしましたが、これでは不十分でした。私も実際にすべてをコピーしようとしましたがcp -R、同じ結果が得られました。

これは64ビットプログラムである必要がありますが、についても同じように考えました /usr/lib/gcc/i686-linux-gnu

straceファイルのオープン、ログファイルの読み取り、ソースの読み取りを試みた場所を確認するために始めることができると確信しています。最終的には、十分に考え出されていないソリューションをハッキングする方法を理解できると思います。しかし、誰かが私にこれを正しい方法で行う方法を教えてくれるといいのですが。


これは、質問の一般的なメリットを損なうものではありません。しかし、XMRigの現在のリリースはGCC 7で問題なくビルドできるはずなので、GCC 6.3 をいじることなくビルドできます。
Stephen Kitt

GCC はフリーソフトウェアであるため、ソースコードからいつでもGCC(古すぎないバージョン)をコンパイルできます。構成するときは注意して、ソースツリーの外でビルドしてください。
Basile Starynkevitch 2017

回答:


10

Kali Linuxに特定のバージョンのGCCをインストールする方法

GCC 6はkali linuxで利用可能で、次のようにインストールできます。

apt install g++-6 gcc-6

gcc6とgcc7を切り替えるには

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1 --slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 2 --slave /usr/bin/g++ g++ /usr/bin/g++-6
update-alternatives --config gcc

出力例:

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-6   2         auto mode
  1            /usr/bin/gcc-6   2         manual mode
  2            /usr/bin/gcc-7   1         manual mode

Press <enter> to keep the current choice[*], or type selection number:

デフォルトのgccバージョンを選択します。

2017-08-05に、gcc-6バージョンがから6.3.0にアップグレードされました6.4.0

ビルドの指示に従ってインストールしxmrigます。

apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make

特定のgccバージョンをビルドする 6.3.0

最も近いミラーからtarballをダウンロードします: GCCリリース

wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar xvf gcc-6.3.0.tar.gz
cd gcc-6.3.0
apt build-dep gcc
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-6.3.0/configure --prefix=/usr/bin/gcc-6.3 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 8
make install

追加gcc-6.3しますupdate-alternatives

重要:この--disable-multilibオプションはgcc、現在のアーキテクチャ用に構成および構築するために必要です。

GCC WIKI:GCCのインストール


1
私を許してください、しかしこれは「gcc-6」が提供するGCCのどのバージョンもインストールしませんか?特に6.3.0をインストールする場合はどうなりますか?
AlphaCentauri 2017

@AlphaCentauri 6か月前に利用可能なgcc6バージョンが6.3.0になりました6.4.0。現在、gcc6バージョンはにアップグレードされています。
GAD3R 2017

1
@AlphaCentauriの回答が、構築手順を含めて更新されました。
GAD3R 2017

1
  1. まず、このウェブサイトにアクセスする必要があります:http : //gcc.gnu.org/mirrors.html
  2. 次に、古いリリースを選択すると、異なるバージョンが表示されます。
  3. 必要なものをクリックすると、ダウンロードが開始されます。

  4. 最後に、ソースからコンパイルしてインストールする必要がありますhttps : //askubuntu.com/questions/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file


1
ありがとうございます。でも、質問全体を読んだとは思いません。ソースからコンパイルしようとした方法を指摘しました。これに関する問題(私の質問で指摘したとおり)は、GCCで「make install」を実行することは、システムを破壊する可能性があるため、良い考えではない可能性があることです。さらに、make installを実行せずに単にGCCを実行すると、独自の課題が生じます。これについても、元の質問で説明しました。
AlphaCentauri 2017

あなたは、あなたの質問に述べたmake install改ざん可能性があるdpkgapt..あなたは手の込んだことができます!@AlphaCentauri
Prashant Luhar

0

あなたは、標準をした場合./configure; makeに任意のオプションを渡さずconfigure、その後make installの様々なサブディレクトリにGCCのご希望のバージョンの作品を配置します/usr/local

/usr/localディレクトリツリー(すなわち。は正確に何をやっている)パッケージ管理システムのシステム管理者の外でソフトウェアをインストールするためのものです。そのため、そこにインストールされたソフトウェアは、非常に異常な状況を除いて、パッケージ化されたソフトウェアを壊しません。

特にGCCは、複数のバージョンがインストールされていることを想定して設計されています。何かを壊すためには、あなたの側で積極的な対策が必要です(たとえば、ハイブリッドバージョンを作成するために、ピースを混合して一致させるなど)。


ソースツリーでGCCを構築しないでください(おそらく成功しません)。そしておそらくあなたはそのconfigureスクリプトに追加のオプションが必要です(例えばいくつか-program-suffix=
Basile Starynkevitch '15

0

私は最終的にこのアプローチに不満を抱き、ソースtarballからGCC 6.3.0をコンパイルしました。コンパイルは成功しました、

まず、ソースからGCCをコンパイルする場合は、より新しいバージョン(2017年末のGCC 7など)を選択することをお勧めします。

次に、ソースツリーのでGCCをビルドconfigure--help、最初にスクリプトを試して、さらににオプションを渡すようにしてくださいconfigure。読んで慎重にGCCのインストールの指示をしての役割を理解したautoconfを

実際には、私はお勧めします

  • /usr/bin/gcc -vシステムのGCCがどのように構成されているかを理解するために実行します

  • apt-get build-dep gcc-6最近のシステムのGCC依存関係を取得するために実行(または同様)

  • GCCソースツリーの外部にビルドディレクトリを作成し、さらに実行します.../configure...たとえば、適切な相対パスで置き換えます../gcc-7.2/make

  • あなたはおそらく、少なくとも渡したい--program-suffix=-mineものにconfigure-mine別のサフィックスに置き換えることができます)あなたも追加される場合があります--prefix=$HOME/soft/あなたがrootアクセスを持っていない場合。あなたはおそらくよいでしょう追加のオプションをするconfigureと、あなたはそれらを慎重に選択して与える必要があります。

  • その後、make install(rootなしで実行しmake install DESTDIR=/tmp/gccinst/、後でroot として注意深く再帰的にコピーすることもでき/tmp/gccinst/ます....)/usr/local/bin/gcc-mineなどにインストールする$HOME/soft/bin/gcc-mineので、システムにインストールされているファイルは破壊されません。

FHSはパッケージ管理システムをそのままにすることを要求することに注意してください/usr/local/(これは--prefixGCCのデフォルトですconfigure


OPは、すでに持っている GCC 7が、見当違いのredditのコメント以下の6.3.0を探していました。
Stephen Kitt

0

また、特定のアーキテクチャ(x86_64、glibc、gcc 6.3)にプリコンパイルされたツールチェーンまたはこれを使用することもでき ます 。

もちろん、次のオプションは、buildrootやyoctoなどのいわゆるrootfs-builderを使用
して、特定のgccバージョンでツールチェーンを生成することです。

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