在服务器上安装第二个gcc

时间:2018-03-16 14:34:19

标签: linux gcc centos

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

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是使用Docker。任何其他方式都可能非常痛苦(除非CentOS有一些设施)。您可以尝试使用此容器https://hub.docker.com/r/ryccoo/gcc-4.8/tags/,但未指定它是什么版本。

这是用于4.8的dockerfile Dockerfile,也许你设法使它使用4.8.5:https://github.com/bincrafters/docker-centos-gcc48-i386/blob/master/Dockerfile

如果这些都不起作用,只需获取具有某个操作系统的容器,该操作系统具有此版本的软件包并进行安装。请记住,您需要进一步的步骤来保存图像状态。我希望你不必编译它。除非你有正确的工具链,否则编译GCC很糟糕。

请记住,容器不是持久性的,因此必须单独附加包含源的目录。编译它们的命令行将是这样的:

docker run -u root -it -v /local/path/to/source:/mounting/point/in/container --rm  \
    name-of-container:version -w /mounting/point/in/container /bin/bash -c \
    "make clean && make; chown -R 1000:1000 ."

答案 1 :(得分:0)

我会考虑使用环境模块: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的/普通/本地)
  3. 目录按软件/版本组织。因此,对于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和friends的模块文件,每个软件包都是使用configure / cmake /的调用安装的,其中包含/ opt / local / stow / $ package的安装前缀。 (在gcc / 6.2.0的情况下,这个调用类似于:./configure --prefix=/opt/local/stow/gcc-6.2.0

    可以使模块文件非常复杂;因此我们有一些自动检测可执行目录,库,手册/信息页面,标题,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
    }