如何在 Ubuntu 16.04 上同时安装 gcc-4.7-plugin-dev 和 gcc-4.8-plugin-dev 而不发生冲突?

如何在 Ubuntu 16.04 上同时安装 gcc-4.7-plugin-dev 和 gcc-4.8-plugin-dev 而不发生冲突?

我刚刚在用于开发的笔记本电脑上安装了 Ubuntu 16.04 Xenial。

我目前正在开发 gcc 的插件,我希望我的插件能够与多个不同版本的编译器兼容(目前从gcc-4.6gcc-6)。因此,我需要同时在开发工作站上安装多个不同版本的编译器和插件头文件,以便我可以针对不同版本构建插件。这在旧的 LTS 14.04 上非常有效,但在新的 LTS 上,我遇到了一个无法解决的问题。

我可以轻松地从默认存储库安装从gcc-4.7到的所有版本的 gcc ,但是当我尝试开始安装软件包时,我遇到了麻烦。如果我只安装、和,基本上一切都很好。之后,如果我尝试安装,我会得到以下信息:gcc-5gcc-*-plugin-devgcc-4.8-plugin-devgcc-4.9-plugin-devgcc-5-plugin-devgcc-4.7-plugin-dev

fez@vbox1604:~$ sudo apt install gcc-4.7-plugin-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libgmpv4-dev
Suggested packages:
  gmp-doc libgmp10-doc libmpfr-dev
The following packages will be REMOVED:
  gcc-4.8-plugin-dev gcc-4.9-plugin-dev gcc-5-plugin-dev libgmp-dev libmpc-dev libmpfr-dev
The following NEW packages will be installed:
  gcc-4.7-plugin-dev libgmpv4-dev
0 upgraded, 2 newly installed, 6 to remove and 0 not upgraded.
Need to get 1003 kB of archives.
After this operation, 15.0 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.
fez@vbox1604:~$

如您所见,如果我不删除其他软件包,它就不会让我安装该软件包。问题似乎是不同版本的 gcc 依赖于不同版本的libgmp。事实上,gcc-4.8-plugin-dev和更高版本需要软件包libgmp-dev,而gcc-4.7-plugin-dev需要libgmpv4-dev。最后这两个实际上是两个独立的软件包,它们是冲突的根源。

这对我来说似乎很奇怪,因为在 Ubuntu 14.04 中一切都运行正常。因此我决定查看 packages.ubuntu.com。以下是我发现的内容:

  1. 关于libgmp-devlibgmpv4-dev

    • Ubuntu 14.04 libgmpv4-dev不存在,并且所有版本都gcc-*-plugin-dev依赖于libgmp-dev
    • Ubuntu 16.04有两个单独的包libgmp-devlibgmpv4-dev。显然,它们两者的唯一区别在于前者留在main存储库中,而后者在universe
    • 为了libgmp-devUbuntu 14.04 和 16.04 中的依赖项相同
    • libgmpv4-dev在 Ubuntu 16.04 上,依赖于基本相同的软件包,但命名和版本与 中的略有不同libgmp-dev。并libgmpv4-dev在其描述中报告“(GCC 4.x 兼容)”。但我不明白这有什么意义,因为 gcc-4.8 属于 4.x 系列,但它与 (不兼容 4.x?) 配合得很好libgmp-dev。直到 Ubuntu 14.04 之前,gcc-4.7 也与 配合使用,所以libgmp-dev我不明白发生了什么变化。
  2. 关于gcc-4.7-plugin-devgcc-4.8-plugin-dev

    • Ubuntu 14.04它们依赖于相同版本的 libgmp:libgmp-dev
    • Ubuntu 16.04目前尚不清楚原因,但它们开始具有不同的依赖关系,正如我在终端上向您展示的那样:
      • gcc-4.7-plugin-dev依赖于取决于libgmpv4-dev
      • gcc-4.8-plugin-dev依赖于取决于libgmp-dev

你们当中有人知道为什么会这样吗?你知道我是否可以安装这两个版本吗?如何安装?gcc-4.7-plugin-devgcc-4.8-plugin-dev在同一台装有 Ubuntu 16.04 的机器上?我不是 apt 依赖项的专家,但有些东西对我来说看起来很奇怪,我真的需要它像以前一样工作,因为我的工作需要它。否则我必须回滚到 14.04(或者在 chroot 中保留旧版本的 gcc,但如果可能的话,我想避免它)。

提前致谢

菲斯


很抱歉,但似乎我在 ask ubuntu 上的声誉不够高,无法发布我提供的有关软件包及其依赖项的所有信息的链接。如果您需要,我可以稍后或在评论中提供。无论如何,只需查看 packages.ubuntu.com 并搜索我提供的确切软件包名称即可找到它们。


我知道 gcc 工具链有一个 ppa(https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/ppa) 并且我也尝试将其添加到我的源中。它使我能够安装更广泛的 gcc 版本 (从gcc-4.5gcc-6),但它没有解决问题,也没有改变任何与冲突有关的内容。

我已经尝试安装 chroot 中存在冲突的版本,似乎可以正常工作,但我真的很想知道是否有办法修复此依赖性问题,而无需使用卑鄙的伎俩。原则上,我想找到一种方法,使安装可以通过 apt 进行管理。

答案1

好吧,我的做法是使用 docker 或 LXD 容器创建“Compiler-Hosts”来避免此类问题。这对你也有效吗?

相关内容