Conda 环境下安装 GCC 和 glibc (crypt.h) 教程
由于运行Low-Light Image Enhancement via Structure Modeling and Guidance原始论文代码,发现服务器的gcc版本太老,没法运行。同时缺少libxcrypt (crypt.h),不得不询问gpt进行解答。发现可以完美解决。
这个教程适用于无 root 权限的环境,如在 Conda 虚拟环境中需要安装新版 gcc/g++ 和补充 glibc (特别是 crypt.h) 失败的情况。
一、通过 conda 安装 gcc/g++
查看系统版本如下,gcc4.8版本很多现有的深度学习模型没法运行。需要进行升级
安装新版本
bash
conda install -c conda-forge gcc_linux-64 gxx_linux-64
使用默认的安装,可能会带来版本太高的问题,超过11的版本,又太新,出现问题。可以指定9版本,
bash
conda install -c conda-forge gcc_linux-64=9 gxx_linux-64=9
安装后,使用 conda 给的 gcc/g++ 而非系统自带:
bash
export CC=$(which x86_64-conda-linux-gnu-gcc)
export CXX=$(which x86_64-conda-linux-gnu-g++)
export CUDAHOSTCXX=$(which x86_64-conda-linux-gnu-g++) # 如果有 CUDA 编译
使用如下命令,会显示安装的版本信息
bash
$CC --version

应该显示 GCC 9.x 或更新版本
二、手动编译安装 libxcrypt (crypt.h)
如果在 PyTorch 或 C++/CUDA 扩展编译时报:
c
fatal error: crypt.h: No such file or directory
那么需要自行编译 libxcrypt:
1. 下载和解压
bash
wget https://github.com/besser82/libxcrypt/releases/download/v4.4.36/libxcrypt-4.4.36.tar.gz
tar -xzf libxcrypt-4.4.36.tar.gz
cd libxcrypt-4.4.36
2. 配置 prefix 安装到 Conda 环境
bash
./configure --prefix=$CONDA_PREFIX
make -j$(nproc)
make install
3. 配置环境变量
确保 include 和 lib 目录可被编译器找到:
bash
export CFLAGS="-I$CONDA_PREFIX/include"
export CXXFLAGS="-I$CONDA_PREFIX/include"
export LDFLAGS="-L$CONDA_PREFIX/lib"
export CPATH="$CONDA_PREFIX/include"
export LIBRARY_PATH="$CONDA_PREFIX/lib"
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"
建议写入 ~/.bashrc
:
bash
echo 'export CPATH="$CONDA_PREFIX/include"' >> ~/.bashrc
echo 'export LIBRARY_PATH="$CONDA_PREFIX/lib"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
三、确认 crypt.h 已安装
bash
ls $CONDA_PREFIX/include/crypt.h
如果有这个文件,说明安装成功。
四、手动编译技巧
如果 PyTorch JIT 扩展仍然报 crypt.h 错误,确保正确指定上面环境变量,并且 gcc/g++ 是 conda 环境内的路径:
bash
which gcc
which g++
如果还是 /usr/bin/gcc
,请重新 export CC
/ CXX
,确保使用 conda 安装的版本。
可选:指定 torch.utils.cpp_extension 使用的 compiler
如果是 PyTorch 编译扩展,可以指定 JIT 编译使用 gcc 和 include 路径:
python
from torch.utils.cpp_extension import load
import os
os.environ["CC"] = "/path/to/your/gcc"
os.environ["CXX"] = "/path/to/your/g++"
os.environ["CFLAGS"] = f"-I{os.environ['CONDA_PREFIX']}/include"
os.environ["LDFLAGS"] = f"-L{os.environ['CONDA_PREFIX']}/lib"
load(...)
总结
这套进程完全避免 root 权限,在 Conda 环境内部装好 gcc/与 crypt.h,适用于 CUDA / PyTorch 合成扩展 / JIT编译需求。