It can't find ShmMessageGrp in the lines
#if defined(HAVE_ARMCI)
else if (msg->class_desc() == ::class_desc<MPIMessageGrp>()) {
default_memorygrp = new ARMCIMemoryGrp(msg);
return default_memorygrp.pointer();
}
#endif
because mpi is included only when HAVE_MPI is defined.