问题
我是在conda虚拟环境中装了自己的gcc,但可以看到,activate虚拟环境后,还在使用系统的gcc。查看你的LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
可以看到为/usr/×××,并不是你的虚拟环境库路径。
确保gcc版本正确
首先,确保你虚拟环境中的gcc版本已经含有GLIBCXX_3.4.20,参考https://www.jianshu.com/p/528c387fb063
使用虚拟环境中的gcc
我们现在需要使用虚拟环境的gcc而不是系统/usr/lib下的。你的gcc对应的libstdc++.so.6应该在anaconda3/envs/虚拟环境名字/lib(或lib64)下面。我们需要在activate虚拟环境的时候改变环境变量LD_LIBRARY_PATH,deactivate的时候再恢复。怎么做参考了以下两个链接:
- https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#macos-and-linux
- https://stackoverflow.com/questions/46826497/conda-set-ld-library-path-for-env-only
我把具体步骤贴上来:
- activate你的虚拟环境
- 查看虚拟环境路径
echo $CONDA_PREFIX
- 去这个路径下建立这些文件夹和文件。在activate的时候,会自动运行activate.d/env_vars.sh,deactivate的时候,会自动运行deactivate.d/env_vars.sh。你可以设置任何你想设置的变量,这里我们更改LD_LIBRARY_PATH
cd $CONDA_PREFIX
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh
touch ./etc/conda/deactivate.d/env_vars.sh
- 编辑activate.d/env_vars.sh,注意换成你的名字,注意=前后不能有空格哦
export OLD_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=anaconda3/envs/your_name/lib64
编辑deactivate.d/env_vars.sh,这样deactivate的时候,会恢复设置
export LD_LIBRARY_PATH=${OLD_LD_LIBRARY_PATH}
unset OLD_LD_LIBRARY_PATH
- deactivate虚拟环境
- 再次activate你的虚拟环境,再查看
echo $CONDA_PREFIX
可以看到已经变成了anaconda3/envs/your_name/lib64。如果这个路径下的gcc已经含有了GLIBCXX_3.4.20,那么就不再会报错了。