我正在尝试php-5.3
在 Arch Linux 上安装,但bison
它太新了,所以我从源代码构建了旧版本bison
。看起来它/usr/local
默认安装到其中。 (这是某种约定吗?)所以我现在想知道是否可以安装多个版本的bison
ie,与默认系统版本和我刚刚安装的版本并排安装。这类东西可能很少需要。我只是好奇而已。这是一件很难做的事情吗?我该怎么办?
答案1
答案2
一致解决此问题的一种方法是使用modules
包裹。它通过更改环境变量(例如二进制文件的路径)来工作。
环境模块包提供通过模块文件动态修改用户环境的功能。模块可以以干净的方式动态、原子地加载和卸载
例如
$ module load gcc/3.1.1
$ which gcc
/usr/local/gcc/3.1.1/linux/bin/gcc
$ module switch gcc gcc/3.2.0
$ which gcc
/usr/local/gcc/3.2.0/linux/bin/gcc
在您的情况下,将选择环境变量bison
中第一个版本PATH
。要为当前终端手动检查或更改此变量,请运行
$ echo $PATH
....
通过 _pre_pending 将其优先/opt/bin
到 PATH:
$ export PATH="/opt/bin:$PATH"
或者,附加/opt/bin/
到PATH
(仅当在其他地方找不到同名二进制文件时才选择PATH
)
$ export PATH="$PATH:/opt/bin"
答案3
只是为了给出更新的答案:
是的,这在当今绝对是可能的。
依赖地狱已经成为过去,除非发行版也是如此。 :)
Arch 并没有削减它。您需要一个基于源的发行版。由于依赖关系将被硬编码(对于硬编码的某些定义),并且两个安装都将指向相同的库等。
但是从源代码构建时,您可以每次使用不同的路径构建它。
Gentoo 长期以来一直有一个名为“slotting”的功能,这使得整个事情变得微不足道。一个包的某个版本的依赖关系可以指定为另一个包的某个“槽”。插槽是不与任何其他插槽冲突的一系列版本。 (对于我见过的大多数包,任何版本都可以是它自己的插槽。特别是对于库。但有时一个包无法处理它,因为它本身依赖于只有一个的东西。或者因为它需要一些从包管理器工作[例如在安装时修改已安装的配置文件])
但我确信任何其他完整源代码发行版都会有类似的东西。
否则,解决方法始终是设置与维护者构建发行版包相同的构建系统,以新名称克隆所需的包,并在其中更改构建过程以指向不同版本的依赖项,然后将其构建到一个新的非源包中,就像您的发行版的包维护者所做的那样。 (坦白说,我发现 Gentoo 更容易安装。:)