この質問は、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をコンパイルしました。コンパイルは成功しましたが、それをインストールする方法に直面しました。 apt
とdpkg
が改ざんされ、システムが破損する可能性があるので、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
を実行して、ファイルを開く場所、ログファイルを読み取る場所、ソースを読み取る場所を確認できると確信しています。最終的には、ハッキングの方法を理解できると思います。不十分に考えられたソリューション。しかし、誰かがこれを正しい方法で行う方法を教えてもらえればいいのですが。
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
。
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.3
〜update-alternatives
重要:--disable-multilib
オプションは、現在のアーキテクチャでgcc
を構成およびビルドするために必要です。
必要なものをクリックすると、ダウンロードが開始されます。
最後に、ソースからコンパイルしてインストールする必要があります: https://askubuntu.com/questions/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file =
オプションをconfigure
に渡さずに標準の./configure; make
を実行した場合、make install
は、目的のバージョンのGCCの一部を/usr/local
のさまざまなサブディレクトリに配置します。
/usr/local
ディレクトリツリーは、システム管理者がパッケージ管理システムの外部にインストールするソフトウェア(つまり、まさに何をしているのか)を対象としています。そのため、そこにインストールされたソフトウェアは、非常に異常な状況を除いて、パッケージ化されたソフトウェアを壊しません。
特にGCCは、複数のバージョンがインストールされていることを想定して設計されています。何かを壊すためには、あなたの側で積極的な対策が必要です(たとえば、ハイブリッドバージョンを作成するために、ピースを混合して一致させるなど)。
私は最終的にこのアプローチに不満を抱き、ソースtarballからGCC 6.3.0をコンパイルしました。コンパイルは成功しました、
まず、ソースからGCCをコンパイルする場合は、より新しいバージョンを選択することをお勧めします(例: GCC 7 2017年の終わり)。
次に、必ずソースツリーのGCCoutsideをビルドし、--help
でconfigure
スクリプトを最初に試し、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
)をそのままにしておく必要があることに注意してください。