Package-Management

如何在 Kali Linux 中安裝特定版本的 GCC?

  • January 6, 2022

這個問題似乎在幾個問題和Google很容易找到的其他地方得到了正確解決,但由於下面解釋的原因,我沒有找到令人滿意的解決方案。但為了完成,我已經包含了一些相關連結:

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

和別的。

然而,這個問題是關於在 Kali Linux 中安裝一個非常特定版本的 GCC,它似乎並不容易作為一個特定的包提供。特別是,問題是關於如何安裝版本 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查看它嘗試從哪裡打開文件、讀取日誌文件、讀取原始碼,最終我想我能夠弄清楚如何將一個構思不佳的解決方案組合在一起。但是,如果有人能以理智的方式告訴我如何做到這一點,那就太好了。

如何在 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.

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

從最近的鏡像下載壓縮包: GCC Releases

wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar xvjf gcc-6.3.0.tar.bz2
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

引用自:https://unix.stackexchange.com/questions/410723