如何替代已废弃的mpireconfig工具以编译早期MPICH遗留代码?
替代废弃的mpireconfig工具的方案
1. 直接改造Makefile.in当Makefile用
当年你是基于示例改的Makefile.in,本质就是个带占位符的模板,mpireconfig无非是填充MPICH的路径、编译器这类变量。直接手动替换就行:
- 先跑
mpicc -show,拿到当前MPICH的编译链接参数,比如输出可能是clang -I/opt/homebrew/include -L/opt/homebrew/lib -lmpi - 打开你的Makefile.in,把里面的
@CC@换成mpicc,@CFLAGS@换成你需要的编译参数(比如-O2 -g),@LDFLAGS@换成刚才mpicc -show里的-I、-L和-lmpi部分 - 把文件改名叫
Makefile,直接跑make试试
2. 装带mpireconfig的旧版MPICH
brew里的新版MPICH早就砍了这个工具,得自己装旧版本:
- 找MPICH 1.2.x系列的源码(2000年代初的主流版本)
- 针对M1 Mac编译的时候,配置阶段加
--host=aarch64-apple-darwin,遇到旧代码的语法报错就手动改几行(比如类型转换、函数声明的小问题) - 编译安装完就能找到
mpireconfig,用它处理你的Makefile.in就行
3. 从零写个新Makefile
嫌上面麻烦的话,直接写个适配当前系统的简单Makefile:
CC = mpicc CFLAGS = -O2 -Wall -g # 按需调整编译参数 LDFLAGS = $(shell mpicc -show | cut -d' ' -f3-) # 自动拉MPICH的链接参数 # 替换成你的源码文件列表 SRCS = main.c utils.c mpi_modules.c OBJS = $(SRCS:.c=.o) TARGET = your_old_program all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) clean: rm -f $(OBJS) $(TARGET)
把里面的源码列表和目标程序名换成你自己的,直接用这个Makefile跑make就行
内容的提问来源于stack exchange,提问作者Roeland
相关产品推荐
相关产品推荐

