您现在的位置是:首页 > 技术教程 正文

Linux系统 利用conda更改gcc、g++版本(非root用户)

admin 阅读: 2024-03-15
后台-插件-广告管理-内容页头部广告(手机)

图片来源于网络

问题场景:

平常使用python安装包时,同时会用到gcc/g++造轮子进行安装,但当我们在公司企业的服务器集群上进行操作时,我们一般都是非root用户,无法对/bin或/lib目录进行更改,无法更新相应文件夹下对应软件的链接。conda为我们提供了环境的隔离,如何为用户配置conda内下载的指定版本gcc呢?甚至做到多环境gcc/g++版本共存,在有需要时快速切换!

解决思路:

1.下载gcc/g++至conda环境

一般,通过conda下载gcc及g++可通过如下命令(在对应的conda环境env中):

conda install -c moussi gcc_impl_linux-64
conda install -c moussi gxx_impl_linux-64

 当需要下载指定版本时,如下载8.4.0版本,我们可以在包名称后加=<版本号>即可,如:

conda install -c moussi gcc_impl_linux-64=8.4.0

等待下载完成(可以加入-y参数,这样之后下载的过程中就不用输入y同意继续下载了)

这里可以用-y搭配nohup免于操心漫长的下载过程。

2.配置环境变量

因为conda下载类似的内容后会把对应内容的软连接(可以理解为windows的快捷方式)添加至bin或lib目录,我们需要将两个目录添加至环境变量:

# 这里假设你的conda环境(环境名称yourEnv)路径为 /custom/conda/envs/yourEnv/

# 如果是base环境则对应 /custom/conda/

export PATH=/custom/conda/envs/yourEnv/bin/:$PATH

# gcc/g++在bin目录下,有的下载会在lib目录下

# 所以如果你想以conda作为你的整体环境,可以同时配置如下环境变量

export PATH=/custom/conda/envs/yourEnv/lib/:$PATH

一般用如下命令查看gcc/g++版本来检验配置是否成功

gcc -v

g++ -v

# 你会发现他们输出的都是gcc的版本,一般二者是版本相配的,所以输出保持一致

你会发现是失败的,还是老的gcc/g++,这里是较难发现的地方!被conda坑了

因为conda下载后的gcc/g++并不以gcc/g++命名,而是有如下对应:

gcc: x86_64-conda-linux-gnu-cc

g++: x86_64-conda-linux-gnu-c++

因为没发现这个,在此卡了很久(因为平常只需要添加PATH环境变量即可)

所以我们可以用如下命令再新建软连接,这样gcc/g++才能被你识别到,否则你就需要输入一长串来执行了!

x86_64-conda-linux-gnu-cc -v

而python之类的所用的命令是gcc/g++,而不是这一长串,所以必须配置新的软连接!保证名字是gcc/g++!

3.为gcc/g++建立软连接(坑)

建立软连接命令(${bin}代表你的conda环境bin目录):

# cd转至你conda下载gcc/g++的bin目录,通过pwd获得目录路径赋值

bin=`pwd`

# 或者使用        bin=你的bin目录路径

ln -s ${bin}/x86_64-conda-linux-gnu-cc ${bin}/gcc
ln -s ${bin}/x86_64-conda-linux-gnu-c++ ${bin}/g++ 

# ln -s <源文件路径> <建立软连接路径> 

至此配置完毕,若你的export PATH配置正确,再次调用gcc -v

你会发现这样就配置完成了! 

4.export PATH添加至.bashrc

为了避免每次SSH登录都需要重复配置PATH,可以将如下代码添加至你的用户目录的.bashrc启动文件中,通过 vim ~/.bashrc 打开编辑,添加如下内容即可:

export PATH=你的conda环境路径/bin/:你的conda环境路径/lib/:$PATH

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜