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

和别的。

但是,这个问题是关于在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/

我最终对这种方法感到沮丧,并从源代码压缩包中编译了GCC 6.3.0。编译成功,但是接下来我要面对如何安装它。我谨慎运行make install,因为我担心它会篡改aptdpkg,并可能破坏系统。

相反,我尝试直接从build目录运行它。我试图简单地将构建目录添加为PATH中的第一个条目,但这没有用。然后,我尝试重命名gcc-6.3.0可执行文件所在的位置/usr/bin/gcc并进行符号链接/usr/bin/gcc。这带来了以下问题:

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(任何不太古老的版本)。配置它时要小心,并在其源代码树之外进行构建。
巴西尔·斯塔林凯维奇

Answers:


10

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

Gali 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版本

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


1
请原谅,但是这不会安装“ gcc-6”提供的GCC版本吗?如果要专门安装6.3.0怎么办?
AlphaCentauri

@AlphaCentauri 6个月前可用的gcc6版本是6.3.0,现在gcc6版本已升级到6.4.0
GAD3R

1
@AlphaCentauri答案已更新,包括构建步骤。
GAD3R

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”可能不是一个好主意,因为它可能会破坏系统。此外,仅运行GCC而不进行make install会带来自身的挑战,我在最初的问题中也对此进行了概述。
AlphaCentauri

您已经在问题中说过make install可能会篡改dpkgapt..您可以详细说明!@AlphaCentauri
Prashant Luhar

0

如果您在./configure; make未传递任何选项的情况下执行了标准configure,则会make install将所需版本的GCC放置在的各个子目录中/usr/local

/usr/local目录树的目的是由包管理系统的系统管理员以外(即究竟你在做什么)安装的软件。这样,除非在极不寻常的情况下,否则安装在那里的软件不会破坏打包的软件。

特别是GCC的设计假设是您将安装多个版本。这几乎需要您采取积极的措施来破坏任何内容(例如,通过混合和匹配片段以尝试创建混合版本)。


您不应该(也可能不会成功)在其源代码树中构建GCC。您可能想要configure脚本的其他选项(例如某些选项-program-suffix=
Basile Starynkevitch

0

我最终对这种方法感到沮丧,并从源代码压缩包中编译了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用户的情况下运行,然后以root用户的make install DESTDIR=/tmp/gccinst/身份仔细递归地复制/tmp/gccinst/....)将东西安装在/usr/local/bin/gcc-mineetc ..(或$HOME/soft/bin/gcc-mine....)中,因此不会破坏任何系统安装的文件。

请注意,FHS要求包裹管理系统不予处理/usr/local/(这是--prefixGCC的默认设置configure


OP已拥有 GCC 7,但在误导的reddit评论之后仍在寻找6.3.0。
史蒂芬·基特

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.