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

Ubuntu22.04安装Madagascar遇scons报错:sfpseudodepth环境冲突

Ubuntu22.04安装Madagascar报错:Two environments with different actions were specified for the same target: sfpseudodepth

问题概述

我是Linux新手,在Ubuntu22.04系统上安装Madagascar时,执行make install后出现错误,根源是SCons报重复目标定义的错误。尝试修改安装路径后问题依旧。

错误信息

执行make install时的错误:

make: *** [Makefile:7: install] Error 2

SCons核心报错:

scons: *** Two environments with different actions were specified for the same target: sfpseudodepth

我的SConstruct文件内容

import sys, os
sys.path.append('../../framework')
import bldutil

progs = '''
integral1 pseudodepth
'''

mpi_progs = '''
mpirtmiso
'''

place = ''

try:  # distributed version
    Import('env root pkgdir bindir')
    env = env.Clone()
except: # local version
    env = bldutil.Debug()
    root = None
    SConscript('../../api/c/SConstruct')

src = Glob('[a-z]*.c')

env.Prepend(CPPPATH=['../../include'],
            LIBPATH=['../../lib'],
            LIBS=[env.get('DYNLIB','')+'rsf'])

mpicc = env.get('MPICC')
for source in src:
    inc = env.RSF_Include(source,prefix='')
    obj = env.StaticObject(source)
    env.Ignore(inc,inc)
    env.Depends(obj,inc)

lapack = env.get('LAPACK')
if lapack:
    if not isinstance(lapack,bool):
        env.Prepend(LIBS=lapack)
    progs += ' pseudodepth'
elif root:
    place += ' pseudodepth'
    for prog in Split('pseudodepth'):
        prog = env.RSF_Place('sf'+prog,None,var='LAPACK',package='lapack')     
        env.Install(bindir,prog)

fftw = env.get('FFTW')
if fftw:
    progs += ' zomiso zomvti'
elif root:
    place += ' zomiso zomvti'
    for prog in Split('zomiso zomvti'):
        prog = env.RSF_Place('sf'+prog,None,var='FFTW',package='fftw')
        env.Install(bindir,prog)

mains = Split(progs)
for prog in mains:
    sources = ['M' + prog]
    bldutil.depends(env,sources,'M'+prog)
    env.StaticObject('M'+prog+'.c')
    prog = env.Program(prog,[x + '.o' for x in sources])
    if root:
        env.Install(bindir,prog)

mpi_mains = Split(mpi_progs)
if mpicc and fftw:
    for prog in mpi_mains:
        sources = ['M' + prog]
        bldutil.depends(env,sources,'M'+prog)
        env.StaticObject('M'+prog+'.c',CC=mpicc)
        prog = env.Program(prog,[x + '.o' for x in sources],CC=mpicc)
        if root:
            env.Install(bindir,prog)
else:
    place += mpi_progs
    for prog in mpi_mains:
        prog = env.RSF_Place('sf'+prog,None,var='MPICC',package='mpi')
        if root:
            env.Install(bindir,prog)


######################################################################
# SELF-DOCUMENTATION
######################################################################
if root:
    user = os.path.basename(os.getcwd())
    main = 'sf%s.py' % user
    
    docs = [env.Doc(prog,'M' + prog) for prog in mains+mpi_mains+Split(place)]
    env.Depends(docs,'#/framework/rsf/doc.py')  
    doc = env.RSF_Docmerge(main,docs)
    env.Install(pkgdir,doc)

操作步骤及配置输出

1. 执行configure命令

(base) master@MasterComputer:~/Python/Madagascar/madagascar-4.0$ ./configure --prefix=/home/master/Python/Madagascar

关键配置输出:

checking for Python ... /home/master/anaconda3/bin/python
checking Python version ... 3.9.13
checking for RSFROOT ... /home/master/Python/Madagascar
checking for SCons ... /home/master/anaconda3/bin/scons
checking SCons version ... v4.4.0.fc8d0ec215ee6cba8bc158ad40c099be0b598297
Running RSFROOT=/home/master/Python/Madagascar /home/master/anaconda3/bin/scons  config ...

scons: Reading SConscript files ...
checking platform ... (cached) linux [ubuntu]
checking for C compiler ... (cached) gcc
checking if gcc works ... yes
...
checking for LAPACK ... no

  Optional package: liblapack-dev
...
checking for FFTW ... no

  Optional package: libfftw3-dev
...

scons: *** Two environments with different actions were specified for the same target: sfpseudodepth
File "/home/master/Python/Madagascar/madagascar-4.0/build/user/xuxin/SConstruct", line 61, in <module>

2. 执行make install命令

(base) master@MasterComputer:~/Python/Madagascar/madagascar-4.0$ make install

输出:

RSFROOT=/home/master/Python/Madagascar PYTHONPATH=/home/master/Python/Madagascar/lib/python3.9/site-packages /home/master/anaconda3/bin/scons install
scons: Reading SConscript files ...

scons: *** Two environments with different actions were specified for the same target: sfpseudodepth
File "/home/master/Python/Madagascar/madagascar-4.0/build/user/xuxin/SConstruct", line 61, in <module>
make: *** [Makefile:7: install] Error 2

问题原因

从配置输出可见,系统未安装LAPACK库,此时SConstruct的逻辑出现冲突:

  1. 开头progs变量已包含pseudodepth
  2. 因lapack检测为no,进入elif root:分支,调用env.RSF_Place('sfpseudodepth'...)并执行安装
  3. 后续遍历mains = Split(progs)时,又为pseudodepth创建编译任务并执行安装

同一目标文件sfpseudodepth被两个不同的SCons操作重复定义,触发报错。

修复方案

1. 修改SConstruct文件

移除开头progs变量中的pseudodepth,确保该程序只在一个分支中处理:

progs = '''
integral1
'''

修改后,LAPACK存在时会将pseudodepth添加到编译列表;LAPACK不存在时,只会执行RSF_Place逻辑,不会重复定义目标。

2. 安装依赖(可选,如需pseudodepth功能)

如果需要使用pseudodepth工具,先安装LAPACK依赖:

sudo apt-get install liblapack-dev libblas-dev

之后重新执行./configure和make install即可正常编译。

内容的提问来源于stack exchange,提问作者Master Zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:27:02