Neko v0.8.0编译报错:undefined reference to MPI_Comm_f2c与ompi_mpi_byte
Neko v0.8.0编译报错(undefined reference)解决指南
问题现象
执行make编译Neko v0.8.0时出现链接错误,报错信息如下:
comm/comm_wrapper.o: In function neko_comm_wrapper_init: /WORK/thuscc24team13_work/neko-0.8.0/src/comm/comm_wrapper.c:16: undefined reference to MPI_Comm_f2c gs/bcknd/device/device_mpi.o: In function device_mpi_isend: /WORK/thuscc24team13_work/neko-0.8.0/src/gs/bcknd/device/device_mpi.c:66: undefined reference to ompi_mpi_byte gs/bcknd/device/device_mpi.o: In function device_mpi_irecv: /WORK/thuscc24team13_work/neko-0.8.0/src/gs/bcknd/device/device_mpi.c:78: undefined reference to ompi_mpi_byte
当前环境配置
已完成jsonfortran安装,导出相关环境变量,当前环境信息如下:
环境变量
$ echo $CC mpiicc $ echo $FC mpiifort $ echo $PKG_CONFIG_PATH /home/thuscc24team13/WORK/json-fortran/main/lib64/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/vtune/2023.0.0/include/pkgconfig/lib64: /apps/compilers/intel/oneapi/v2023.0.0.25537/vpl/2023.0.0/lib/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/tbb/2021.8.0/env/../lib/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/mpi/2021.8.0/lib/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/mkl/2023.0.0/lib/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/ippcp/2021.6.3/lib/pkgconfig: /apps/compilers/intel/oneapi/v2023.0.0.25537/inspector/2023.0.0/include/pkgconfig/lib64: /apps/compilers/intel/oneapi/v2023.0.0.25537/compiler/2023.0.0/lib/pkgconfig
已加载模块
$ module list Currently Loaded Modulefiles: 1) compilers/intel/oneapi-2023/compiler/config 2) compilers/intel/oneapi-2023/mkl/config 3) compilers/intel/oneapi-2023/mpi/config 4) tools/cmake/v3.25.2 5) compilers/intel/oneapi-2023/config 6) mpi/openmpi/v4.1.4
解决步骤
这类链接错误源于MPI库链接不正确,或同时加载了不同MPI实现(Intel MPI与OpenMPI)导致冲突,按以下步骤处理:
清理冲突MPI模块
当前同时加载Intel oneAPI MPI和OpenMPI,先卸载OpenMPI模块:module unload mpi/openmpi/v4.1.4统一MPI环境变量
确保编译工具链指向Intel MPI的编译器:export MPIFC=mpiifort export CC=mpiicc export FC=mpiifort重新配置编译环境
进入Neko源码目录,清理旧编译文件后重新执行cmake配置:cd /WORK/thuscc24team13_work/neko-0.8.0 make clean rm -rf CMakeCache.txt CMakeFiles/ cmake . -DCMAKE_C_COMPILER=mpiicc -DCMAKE_Fortran_COMPILER=mpiifort -DJSONFORTRAN_DIR=/home/thuscc24team13/WORK/json-fortran/main重新编译
执行多线程编译:make -j$(nproc)
额外排查方案
若上述步骤无效,检查pkg-config对MPI库的识别情况:
# 检查Intel MPI pkg-config --libs intelmpi
若pkg-config无法正确识别,可手动在cmake时指定MPI库路径:
cmake . -DCMAKE_C_COMPILER=mpiicc -DCMAKE_Fortran_COMPILER=mpiifort -DMPI_C_LIBRARIES=/apps/compilers/intel/oneapi/v2023.0.0.25537/mpi/2021.8.0/lib/libmpi.so -DMPI_Fortran_LIBRARIES=/apps/compilers/intel/oneapi/v2023.0.0.25537/mpi/2021.8.0/lib/libmpi_mpifh.so
内容的提问来源于stack exchange,提问作者Just-lose-it
相关产品推荐
相关产品推荐

