AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 410723
Accepted
AlphaCentauri
AlphaCentauri
Asked: 2017-12-14 11:34:05 +0800 CST2017-12-14 11:34:05 +0800 CST 2017-12-14 11:34:05 +0800 CST

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

  • 772

这个问题似乎在几个问题和谷歌很容易找到的其他地方得到了正确的解决,但由于下面解释的原因,我没有找到令人满意的解决方案。但为了完成,我已经包含了一些相关链接:

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 中的第一个条目,但这不起作用。然后,我尝试重命名/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 package-management
  • 5 5 个回答
  • 47158 Views

5 个回答

  • Voted
  1. Best Answer
    GAD3R
    2017-12-15T05:11:07+08:002017-12-15T05:11:07+08:00

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

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

    重要提示:该选项是为当前架构--disable-multilib配置和构建所必需的。gcc

    GCC WIKI : 安装 GCC

    • 11
  2. Prashant Luhar
    2017-12-14T17:24:28+08:002017-12-14T17:24:28+08:00
    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
  3. Mark
    2017-12-15T15:00:09+08:002017-12-15T15:00:09+08:00

    如果您在没有将./configure; make任何选项传递给.configuremake install/usr/local

    目录树适用于系统管理员在包管理系统之外安装的/usr/local软件(即,正是您正在做的事情)。因此,安装在那里的软件不会破坏打包的软件,除非在极不寻常的情况下。

    特别是 GCC 是围绕您将安装多个版本的假设而设计的。它几乎需要您采取积极措施来破坏任何东西(例如,通过混合和匹配部分来尝试创建混合版本)。

    • 0
  4. Basile Starynkevitch
    2017-12-16T01:36:38+08:002017-12-16T01:36:38+08:00

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

    请注意,FHS要求包管理系统不理会(这是GCC 的/usr/local/默认设置)--prefixconfigure

    • 0
  5. Christian Stenzel
    2019-01-15T12:20:19+08:002019-01-15T12:20:19+08:00

    您还可 以为您的特定架构(x86_64、glibc、gcc 6.3)使用预编译的工具链或这个 工具链。

    当然,下一个选项是使用所谓的 rootfs-builder (如 buildroot 或 yocto)
    来生成具有您特定 gcc 版本的工具链。

    • 0

相关问题

  • 了解 apt 列表输出

  • 在 kali 滚动上使用专用 GPU

  • 使用 shell 脚本安装 ncdf4 R 包

  • 在 Kali Linux 中的 Windows 7 分区上安装 grub

  • python2 和 OpenSSL 不能在 Kali 上一起玩 - 如何解决?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve