macOS 14.5下编译ELPA库遇多阶段错误求助
解决macOS 14.5下编译ELPA库的系列错误
1. 解决clang: error: no input files错误
这个错误来自ELPA的依赖生成脚本,macOS下cpp对/dev/stdout的处理存在兼容性问题:
- 编辑
fdep/fortran_dependencies.mk,找到包含-o /dev/stdout的cpp调用行,删除-o /dev/stdout参数 - 重新运行
./autogen.sh和你的configure命令,确保生成新的Makefile
2. 解决empty character constant [-Werror,-Winvalid-pp-token]错误
这是测试代码里的空字符串触发了cpp的-Werror导致编译失败,有两种处理方案:
- 方案一:修改测试代码:手动编辑
../test/Fortran/test.F90第358行,将print *,''改为print *,' '(替换为空空格) - 方案二:关闭cpp的-Werror:在configure时给
CPPFLAGS添加-Wno-error,更新后的configure命令示例:CC=mpicc FC=mpif90 CXX=mpicxx ../configure SCALAPACK_LDFLAGS="-L/usr/local/opt/scalapack/lib -L/usr/local/opt/openblas/lib -L/usr/local/opt/openmpi/lib" SCALAPACK_FCFLAGS="-L/usr/local/opt/scalapack/lib -L/usr/local/opt/openblas/lib -L/usr/local/opt/openmpi/lib" CPPFLAGS="-I/usr/local/opt/openblas/include -I/usr/local/opt/openblas/include -Wno-error" PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig" CFLAGS="-O3 -fPIC -march=native" FCFLAGS="-O3 -fPIC -march=native" CXXFLAGS="-O3 -fPIC -march=native"
3. 解决Cannot open module file 'merge_recursive.mod'错误
这个问题是Makefile依赖顺序错误,merge_recursive模块未提前编译:
- 手动预编译模块:在build目录下先单独编译该模块文件:
执行后会生成mpif90 -c ../src/solve_tridi/merge_recursive.F90 -o src/solve_tridi/merge_recursive.omerge_recursive.mod文件,之后再运行make即可正常编译 - 切换编译器:macOS的clang Fortran编译器对模块处理可能存在兼容性问题,建议通过brew安装
gcc,使用对应的mpif90(如mpif90-gcc13)重新编译 - 跳过测试加速编译:如果暂时不需要测试,configure时添加
--disable-tests选项,优先编译核心库
额外建议
- 确保brew安装的
scalapack、openblas、openmpi版本相互兼容,避免版本不匹配 - 查看ELPA源码目录下的
INSTALL或README.md文件,确认有没有针对macOS/clang的特殊编译说明
内容的提问来源于stack exchange,提问作者xinbiao wang
相关产品推荐
相关产品推荐

