我有安装了4.8.2 gcc的centos服务器。现在我想在同一台服务器上安装4.8.5 gcc。要求是我在同一台服务器上需要两个gcc。如何在服务器上安装4.8.5 gcc?
答案 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
的命令轻松地在它们之间切换。
我们的管理员提供的常规设置包括:
目录按软件/版本组织。因此,对于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
}