web-dev-qa-db-ja.com

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

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

https://askubuntu.com/questions/138284/how-to-downgrade-a-package-via-apt-gethttps://askubuntu.com/questions/428772/ how-to-install-specific-version-of-some-package/428778https://askubuntu.com/questions/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をコンパイルしました。コンパイルは成功しましたが、それをインストールする方法に直面しました。 aptdpkgが改ざんされ、システムが破損する可能性があるので、make installの実行には注意が必要です。

代わりに、ビルドディレクトリから直接実行しようとしました。 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を実行して、ファイルを開く場所、ログファイルを読み取る場所、ソースを読み取る場所を確認できると確信しています。最終的には、ハッキングの方法を理解できると思います。不十分に考えられたソリューション。しかし、誰かがこれを正しい方法で行う方法を教えてもらえればいいのですが。

8
AlphaCentauri

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.06.4.0

build's の指示に従って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

最も近い mirror からtarballをダウンロードします: GCC Releases

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.3update-alternatives

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

GCC WIKI:GCCのインストール

10
GAD3R
  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
Prashant Luhar

オプションをconfigureに渡さずに標準の./configure; makeを実行した場合、make installは、目的のバージョンのGCCの一部を/usr/localのさまざまなサブディレクトリに配置します。

/usr/localディレクトリツリーは、システム管理者がパッケージ管理システムの外部にインストールするソフトウェア(つまり、まさに何をしているのか)を対象としています。そのため、そこにインストールされたソフトウェアは、非常に異常な状況を除いて、パッケージ化されたソフトウェアを壊しません。

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

0
Mark

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

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

次に、必ずソースツリーのGCCoutsideをビルドし、--helpconfigureスクリプトを最初に試し、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/を追加することもできます。おそらく、configureに(= /// =)追加のオプションが必要であり、それらを慎重に選択して指定する必要があります。

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

[〜#〜] fhs [〜#〜] は、パッケージ管理システムが/usr/local/(GCCのconfigureのデフォルトの--prefix)をそのままにしておく必要があることに注意してください。

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

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

0