Undefined reference to `ompi_mpi` when building lammps with cmake

Dear lammps users:

I got an error when building lammps(23 Jun 2022) with cmake(version 3.25.1).
After typing cmake --build .,
The error occurred after

[100%] Linking CXX static library liblammps.a
[100%] Built target lammps
[100%] Building CXX object CMakeFiles/lmp.dir/home/lijun/softwarez/lammps2/src/main.cpp.o
[100%] Linking CXX executable lmp

and the tail of the error shows:

/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:229: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:524: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:569: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:577: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:578: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:580: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:584: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(rcb.cpp.o): in function `LAMMPS_NS::RCB::compute_old(int, int, double**,double*, double*, double*)':
/home/lijun/softwarez/lammps2/src/rcb.cpp:766: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:766: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:767: undefined reference to `ompi_mpi_op_max'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:767: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:908: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:908: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1011: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1072: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1076: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:951: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:951: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1057: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1069: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1072: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1076: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1014: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:766: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:766: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1061: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1069: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1070: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1072: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1076: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/rcb.cpp:1016: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(angle_hybrid.cpp.o): in function `LAMMPS_NS::AngleHybrid::read_restart(_IO_FILE*)':
/home/lijun/softwarez/lammps2/src/angle_hybrid.cpp:348: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/angle_hybrid.cpp:357: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/angle_hybrid.cpp:360: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/angle_hybrid.cpp:357: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(angle_zero.cpp.o): in function `LAMMPS_NS::AngleZero::read_restart(_IO_FILE*)':
/home/lijun/softwarez/lammps2/src/angle_zero.cpp:135: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(bond_hybrid.cpp.o): in function `LAMMPS_NS::BondHybrid::read_restart(_IO_FILE*)':
/home/lijun/softwarez/lammps2/src/bond_hybrid.cpp:338: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/bond_hybrid.cpp:347: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/bond_hybrid.cpp:350: undefined reference to `ompi_mpi_char'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/bond_hybrid.cpp:347: undefined reference to `ompi_mpi_int'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(bond_zero.cpp.o): in function `LAMMPS_NS::BondZero::read_restart(_IO_FILE*)':
/home/lijun/softwarez/lammps2/src/bond_zero.cpp:132: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(fix_wall.cpp.o): in function `LAMMPS_NS::FixWall::compute_scalar()':
/home/lijun/softwarez/lammps2/src/fix_wall.cpp:369: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/fix_wall.cpp:369: undefined reference to `ompi_mpi_double'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: liblammps.a(fix_wall.cpp.o): in function `LAMMPS_NS::FixWall::compute_vector(int)':
/home/lijun/softwarez/lammps2/src/fix_wall.cpp:384: undefined reference to `ompi_mpi_op_sum'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /home/lijun/softwarez/lammps2/src/fix_wall.cpp:384: undefined reference to `ompi_mpi_double'
collect2: error: ld returned 1 exit status
gmake[2]: *** [lmp] Error 1
gmake[1]: *** [CMakeFiles/lmp.dir/all] Error 2
gmake: *** [all] Error 2

The output of the previous step, i.e. cmake3 ../cmake , shows:

(base) [lijun@ljc9 build]$ cmake ../cmake
-- The CXX compiler identification is GNU 9.3.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/rh/devtoolset-9/root/usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Git: /usr/bin/git (found version "1.8.3.1")
-- Appending /home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libvori-220621/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/spglib-1.16.2/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/plumed-2.8.1/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/gsl-2.7/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/elpa-2022.11.001/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/COSMA-2.6.2/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libxsmm-1.17/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libxc-6.0.0/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/openmpi-4.1.4/lib:/opt/intel/oneapi/mpi/2021.5.1/libfabric/lib:/opt/intel/oneapi/mpi/2021.5.1/lib/release:/opt/intel/oneapi/mpi/2021.5.1/lib:/opt/intel/oneapi/mkl/2022.0.2/lib/intel64:/opt/intel/oneapi/tbb/2021.5.1/lib/intel64/gcc4.8:/opt/intel/oneapi/compiler/2022.0.2/linux/lib:/opt/intel/oneapi/clck/2021.5.0/lib/intel64:/opt/intel/oneapi/ccl/2021.5.1/lib/cpu_gpu_dpcpp to CMAKE_LIBRARY_PATH: /home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libvori-220621/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/spglib-1.16.2/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/plumed-2.8.1/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/gsl-2.7/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/elpa-2022.11.001/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/COSMA-2.6.2/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libxsmm-1.17/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libxc-6.0.0/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5/lib:/home/lijun/softwarez/cp2k-2023.1/tools/toolchain/install/openmpi-4.1.4/lib:/opt/intel/oneapi/mpi/2021.5.1/libfabric/lib:/opt/intel/oneapi/mpi/2021.5.1/lib/release:/opt/intel/oneapi/mpi/2021.5.1/lib:/opt/intel/oneapi/mkl/2022.0.2/lib/intel64:/opt/intel/oneapi/tbb/2021.5.1/lib/intel64/gcc4.8:/opt/intel/oneapi/compiler/2022.0.2/linux/lib:/opt/intel/oneapi/clck/2021.5.0/lib/intel64:/opt/intel/oneapi/ccl/2021.5.1/lib/cpu_gpu_dpcpp
-- Running check for auto-generated files from make-based build system
-- Found MPI_CXX: /opt/intel/oneapi/mpi/2021.5.1/lib/libmpicxx.so (found version "3.1")
-- Found MPI: TRUE (found version "3.1")
-- Looking for C++ include omp.h
-- Looking for C++ include omp.h - found
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found JPEG: /usr/lib64/libjpeg.so (found version "62")
-- Found PNG: /usr/lib64/libpng.so (found version "1.5.13")
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.7")
-- Found GZIP: /usr/bin/gzip
-- Could NOT find FFMPEG (missing: FFMPEG_EXECUTABLE)
-- Looking for C++ include cmath
-- Looking for C++ include cmath - found
-- Generating style headers...
-- Generating package headers...
-- Generating lmpinstalledpkgs.h...
-- Could NOT find ClangFormat (missing: ClangFormat_EXECUTABLE) (Required is at least version "8.0")
-- The following tools and libraries have been found and configured:
 * Git
 * MPI
 * OpenMP
 * JPEG
 * PNG
 * ZLIB

-- <<< Build configuration >>>
   LAMMPS Version:   20220623
   Operating System: Linux CentOS Linux 7
   Build type:       RelWithDebInfo
   Install path:     /home/lijun/.local
   Generator:        Unix Makefiles using /usr/bin/gmake
-- Enabled packages: <None>
-- <<< Compilers and Flags: >>>
-- C++ Compiler:     /opt/rh/devtoolset-9/root/usr/bin/g++
      Type:          GNU
      Version:       9.3.1
      C++ Flags:     -O2 -g -DNDEBUG
      Defines:       LAMMPS_SMALLBIG;LAMMPS_MEMALIGN=64;LAMMPS_OMP_COMPAT=4;LAMMPS_JPEG;LAMMPS_PNG;LAMMPS_GZIP
-- <<< Linker flags: >>>
-- Executable name:  lmp
-- Static library flags:
-- <<< MPI flags >>>
-- MPI_defines:      MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX;_MPICC_H
-- MPI includes:     /opt/intel/oneapi/mpi/2021.5.1/include
-- MPI libraries:    /opt/intel/oneapi/mpi/2021.5.1/lib/libmpicxx.so;/opt/intel/oneapi/mpi/2021.5.1/lib/release/libmpi.so;/lib64/librt.so;/lib64/libpthread.so;/lib64/libdl.so;
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lijun/softwarez/lammps2/build

What should I do to fix the problem?

This looks like a problem with the setup of your machine. There seems to be an MPI header file (mpi.h) that belongs to an OpenMPI installation in the system include path before the corresponding header for your Intel-MPI is found.

This is impossible to further debug from remote.

Thank you Axel.
I also found lammps could be built successfully with make on my machine. However, I’m confused with how to build kokkos package with traditional make settings.
As is instructed on lammps doc, I should modify the src/MAKE/OPTIONS/Makefile.kokkos* files according to the machine hardware. There are 4 Makefile.kokkos* files in the directory:
Makefile.kokkos_phi,
Makefile.kokkos_omp,
Makefile.kokkos_mpi_only,
Makefile.kokkos_cuda_mpi.
For CPU machine, I’m puzzled about which Makefile to modify, it seems that the KOKKOS_ARCH parameter only appears in Makefile.kokkos_cuda_mpi.

To run ReaxFF on CPUs with Kokkos, the easiest is to use Makefile.kokkos_mpi_only. You can add KOKKOS_ARCH and set the value to your machine if you want–it may help a little with vectorization but is not required.

Thanks for your kind advice. :blush: