这个问题似乎在几个问题和其他很容易通过谷歌找到的地方得到了正确的解决,但由于下面解释的原因,我没有找到令人满意的解决方案。但为了完整起见,我添加了一些相关链接:
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
,因为我担心它会篡改apt
并dpkg
可能破坏系统。
相反,我尝试直接从构建目录运行它。我尝试简单地将构建目录添加为 PATH 中的第一个条目,但这不起作用。然后,我尝试重命名并从gcc-6.3.0 可执行文件所在的位置/usr/bin/gcc
进行符号链接。/usr/bin/gcc
这带来了以下问题:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
这是通过我的路径中的另一个条目修复的。
然后,我收到此错误:
/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
查看它尝试从哪里打开文件、读取日志文件、读取源代码,最终我想我能够弄清楚如何将一个构思不佳的解决方案组合在一起。但如果有人能告诉我如何以理智的方式做到这一点,那就太好了。
答案1
如何在 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年8月5日,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
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.3
update-alternatives
重要的:为当前架构--disable-multilib
配置和构建需要该选项。gcc
答案2
- 首先你必须访问这个网站:http://gcc.gnu.org/mirrors.html
- 然后选择旧版本,您将看到不同的版本。
现在您应该单击您想要的那个,下载就会开始。
最后,您必须从源代码编译并安装:https://askubuntu.com/questions/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
答案3
如果您执行了一个标准./configure; make
而没有传递任何选项configure
,那么make install
会将您所需的 GCC 版本的各个部分放置在 的各个子目录中/usr/local
。
目录/usr/local
树适用于系统管理员在包管理系统之外安装的软件(即您正在执行的操作)。因此,除非在极不寻常的情况下,安装在那里的软件不会破坏打包的软件。
GCC 尤其是围绕您将安装多个版本的假设而设计的。它几乎需要您采取积极措施来破坏任何东西(例如,通过混合和匹配部件来尝试创建混合版本)。