You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境Singularity容器中Quantum Espresso编译失败问题

问题描述

在CentOS 7.9的Singularity容器中构建包含libxc 5.2.3和Quantum Espresso 7.0的环境时遇到如下问题:

  • 自定义base.def构建沙箱容器后,手动编译安装libxc成功
  • QE的./configure阶段成功检测到所有依赖库(BLAS、LAPACK、FFTW、LIBXC)及并行环境,生成makefile
  • 执行sudo make all时,在UtilXlib编译阶段报错:make[1]: mpif90: Command not found

相关配置与操作步骤

容器定义文件base.def

Bootstrap: docker
From: centos:7.9.2009

####################
%help
 This container contains the base image for QE with libxc for HPC.
####################
%post
#####
# proxy settings
sudo yum install -y sudo git wget vim which tree
sudo yum install -y hostname lscpu uptime redhat-lsb numactl

#Install needed dependencies
yum install -y epel-release centos-release-scl && yum -y update && yum clean all
sudo yum groupinstall -y "Development Tools" && yum clean all
sudo yum install open-ssl-devel bzip2-devel libffi-devel -y
sudo yum makecache
sudo yum -y install gcc-gfortran
sudo yum -y install blas-devel
sudo yum -y install fftw-devel
sudo yum -y install lapack-devel
sudo yum -y install openmpi-devel


###############
%environment
##############

source /etc/profile.d/modules.sh
module load mpi/openmpi-x86_64

export PATH=/usr/lib64/openmpi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export LD_LIBRARY_PATH=/usr/lib64/openmpi/bin:/usr/lib64

编译操作步骤

sudo singularity build --sandbox QE7-libxcm base.def
sudo singularity shell --writable QE7-libxcm

# Libxc编译和安装
wget http://www.tddft.org/programs/libxc/down.php?file=5.2.3/libxc-5.2.3.tar.gz
tar -xvf libxc-5.2.3.tar.gz
cd libxc-5.2.3
sudo ./configure --prefix=/opt/libxc-5.2.3

# 使用CFLAGS=-std=c99避免编译问题
sudo make CFLAGS=-std=c99
sudo make check
sudo make install

# QE编译
wget https://github.com/QEF/q-e/archive/refs/tags/qe-7.0.tar.gz
tar -xvf qe-7.0.tar.gz
cd qe-7.0

./configure --with-libxc --with-libxc-prefix='/opt/libxc-5.2.3'

./configure输出片段

The following libraries have been found:
  BLAS_LIBS= -lblas 
  LAPACK_LIBS=-L/usr/lib64 -llapack  -lblas 
  FFT_LIBS= -lfftw3 
  
  LIBXC_LIBS= -L/opt/libxc-5.2.3/lib -lxcf03 -lxc

Please check if this is what you expect.

If any libraries are missing, you may specify a list of directories
to search and retry, as follows:
  ./configure LIBDIRS="list of directories, separated by spaces"

Parallel environment detected successfully.
Configured for compilation of parallel executables.

报错信息

...
make[1]: Entering directory `/opt/qe-7.0/UtilXlib'
mpif90 -O3 -g -cpp -D__FFTW3 -D__LIBXC -D__MPI  -I/opt/qe-7.0/external/devxlib/src -I/opt/qe-7.0/include -I/opt/qe-7.0/FoX/finclude  -I/opt/libxc-5.2.3/include -I/usr/lib64 -I. -c parallel_include.f90
make[1]: mpif90: Command not found
make[1]: *** [parallel_include.o] Error 127
make[1]: Leaving directory `/opt/qe-7.0/UtilXlib'
make: *** [libutil] Error 1

解决方案

1. 直接执行make(无需sudo)

容器以--writable模式启动,当前用户已有足够权限修改容器内文件,无需使用sudo:

make all

2. 若必须用sudo,保留环境变量

sudo默认会重置PATH等环境变量,需添加-E参数保留当前环境:

sudo -E make all

3. 手动指定编译器路径到configure

在configure阶段直接指定MPI编译器的绝对路径,规避环境变量加载问题:

./configure --with-libxc --with-libxc-prefix='/opt/libxc-5.2.3' FC=/usr/lib64/openmpi/bin/mpif90 CC=/usr/lib64/openmpi/bin/mpicc

4. 修复容器环境变量配置

原base.def中LD_LIBRARY_PATH错误指向了/usr/lib64/openmpi/bin,应改为/usr/lib64/openmpi/lib,修改后的%environment部分:

%environment
source /etc/profile.d/modules.sh
module load mpi/openmpi-x86_64

export PATH=/usr/lib64/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH

修改后重新构建容器即可生效。


内容的提问来源于stack exchange,提问作者Roxana Sida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:54:13