linux - 在服务器上安装第二个 gcc

标签 linux gcc centos

我有安装了 4.8.2 gcc 的 centos 服务器。现在我想在同一台服务器上安装 4.8.5 gcc。要求是我在同一台服务器上需要两个 gcc。如何继续在服务器上安装 4.8.5 gcc?

最佳答案

我会考虑使用环境模块:http://modules.sourceforge.net

在我们的系统上,我们安装了相当多的编译器,并且可以通过类似于以下命令很容易地在它们之间切换:module add gcc/6.2.0

我们的管理员提供的一般设置包括:

  1. 包含模块文件的几个目录,这些文件是包含更改相关 shell 搜索路径所需的指令的文本文件。 (例如/sw/RedHat-7-x86_64/common/modules)
  2. 安装实际软件的相应目录。 (/sw/RedHat-7-x86_64/common/local)

目录按软件/版本组织。因此对于 gcc/6.2.0 的情况,模块文件包括:

#%Module 1.0
module add gmp/6.1.1
module add mpfr/3.1.4
module add mpc/1.0.3
module add ppl/1.2
module add cloog/0.18.4
module add dejagnu/1.6
module add autogen/5.18.7
module add isl/0.16.1

prepend-path PATH /opt/local/stow/gcc-6.2.0/bin
prepend-path MANPATH /opt/local/stow/gcc-6.2.0/share/man
prepend-path CPATH  /opt/local/stow/gcc-6.2.0/include
prepend-path LIBRARY_PATH /opt/local/stow/gcc-6.2.0/lib64:/opt/local/stow/gcc-6.2.0/lib
prepend-path LD_RUN_PATH /opt/local/stow/gcc-6.2.0/lib64:/opt/local/stow/gcc-6.2.0/lib
prepend-path LD_LIBRARY_PATH /opt/local/stow/gcc-6.2.0/lib64:/opt/local/stow/gcc-6.2.0/lib

还有 gmp 和 friend 的模块文件,每个软件包都是使用 configure/cmake/whatever 调用安装的,其中包括/opt/local/stow/$package 的安装前缀。 (对于 gcc/6.2.0,此调用类似于:./configure --prefix=/opt/local/stow/gcc-6.2.0)

有可能使模块文件非常详尽;因此我们有一些自动检测可执行目录、库、手册/信息页、 header 、pkgconfig 指令、python 虚拟环境等的东西。这是一个生活在它自己的虚拟环境中的 python 包的例子:

#%Module
set NAME [module-info name]
set MODULE_FILE_AUTHOR "bob"
set MODULE_FILE_AUTHOR_EMAIL "bob@gmail.com"
set MODULE_FILE_MAINTAINER "bob@gmail.com"
module-whatis "labnote: Make a lab notebook!"

if [ module-info mode load ] {
 if {! [info exists ::env(MODULE_PRE)] } {
  setenv COMMON "/cbcb/sw/RedHat-7-x86_64/common"
  setenv MODULE_PRE "$::env(COMMON)/local"
 }
}
set DIR $::env(MODULE_PRE)/[module-info name]
### Add pre-requisites here
module add Python3/common/3.6.0
### Add extra variables here
### Define a simple help message
proc ModulesHelp { } {
  global NAME  MODULE_FILE_AUTHOR MODULE_FILE_AUTHOR_EMAIL MODULE_FILE_MAINTAINER
  puts "The $NAME module file was installed by $MODULE_FILE_AUTHOR ($MODULE_FILE_AUTHOR_EMAIL)
  and is maintained by $MODULE_FILE_MAINTAINER."
}
set is_module_rm [module-info mode remove]
###
# Add your executable to PATH.
###
if { [file isdirectory $DIR/bin] == 1} {
 prepend-path PATH $DIR/bin
}
###
# Add an include directory
###
if { [file isdirectory $DIR/include] == 1} {
 prepend-path CPATH $DIR/include
}
###
# Set up library paths
###
if { [file isdirectory $DIR/lib] == 1} {
 prepend-path LIBRARY_PATH $DIR/lib
 prepend-path LD_RUN_PATH $DIR/lib
}
###
# Python virtual environments
###
if { [file isfile $DIR/bin/activate] == 1} {
 setenv VIRTUAL_ENV $DIR
}

关于linux - 在服务器上安装第二个 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323245/

相关文章:

python - 杂波不会在断点之外更新屏幕

php - Centos 上 Apache Web 服务器的 64 位实例与 32 位实例 - httpd + PHP5

android - 未知使用 FFMPEG 存储大小为 'dstFormat' 构建 PJSIP 时出错

gcc - 我可以用动态符号表编译静态应用程序吗?

node.js - Redis 无法在 CentOS 上运行

Jenkins 上的 Mercurial,安装和配置

linux - 是否可以在没有 debugfs 的情况下使用 ftrace?

c - Linux C,文件验证不起作用

正则表达式不检查文本的某些部分

c - 彻底理解 glibc 中代码的最佳方法