我需要强制我的Cmake构建并将我的MPI代码与MPICH连接起来。我的MPICH是使用Ubuntu安装在标准位置/usr/lib/mpich/中的。但是,CMake仍然查找OpenMPI库,我不使用这些库。如何指示CMake去寻找MPICH呢?
下面,您可以看到一些基本诊断的输出:
$ whereis openmpi
openmpi:
$ whereis mpich
mpich: /usr/lib/mpich /usr/include/mpich
$ mpicc -v
mpicc for MPICH version 3.2下面,我还提供了Cmake脚本和从cmake和mpirun.mpich.获得的错误。我的Cmake是3.5.1,我在16.04上运行。
cmake_minimum_required(VERSION 3.0)
message (STATUS "Adding mpiService")
find_package(MPI REQUIRED)
set(CMAKE_C_COMPILER mpicc)
set(CMAKE_CXX_COMPILER mpicxx)
set(MPI_GUESS_LIBRARY_NAME MPICH2)
message(STATUS ${MPI_INCLUDE_PATH})
message(STATUS ${MPI_C_LIBRARIES})
#add_definitions(-DOMPI_SKIP_MPICXX)
add_executable(mpiService main.cpp)
set(CMAKE_VERBOSE_MAKEFILE ON)
include_directories(SYSTEM ${MPI_INCLUDE_PATH})
target_link_libraries(
mpiService
PRIVATE
${MPI_C_LIBRARIES}
)从Cmake状态中,我得到了以下输出:
/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include/usr/lib/openmpi/include/usr/lib/openmpi/include/openmpi
/usr/lib/openmpi/lib/libmpi.so当我运行二进制文件时,我得到以下信息:
ubuntu@node1:~$ mpirun.mpich -np 2 --host node1,node2 mpiService
mpiService: error while loading shared libraries: libmpi.so.12: cannot open shared object file: No such file or directory
mpiService: error while loading shared libraries: libmpi.so.12: cannot open shared object file: No such file or directory发布于 2017-12-26 09:36:06
我怎样才能指示CMake去寻找MPICH呢?
根据FindMPI文档,您可以将MPI_<lang>_COMPILER变量设置为所需的MPI编译器:
将MPI__COMPILER设置为MPI包装器(mpicc等)你的选择和重新配置。FindMPI将尝试使用编译器的编译和链接标志来确定所有必需的变量。
set(MPI_CXX_COMPILER <path-to-mpich-compiler>)
find_package(MPI REQUIRED)或者,由于CMake 3.10版,可以设置变量MPI_EXECUTABLE_SUFFIX:
一个后缀,它被附加到正在查找的所有名称之后。例如,您可以将其设置为.mpich或.openmpi,以选择Debian及其衍生工具中的一个或另一个。
set(MPI_EXECUTABLE_SUFFIX ".mpich")
find_package(MPI REQUIRED)发布于 2018-01-29 23:34:23
随函附上我目前的解决方案。
find_package(MPI REQUIRED)
# ----------------
# This is the only thing that made it work
# ----------------
set(MPI_C_LIBRARIES "/usr/lib/mpich/lib/libmpich.so")
set(MPI_INCLUDE_PATH "/usr/include/mpich")
# ----------------
add_executable(mpiService main.cpp)
include_directories(SYSTEM ${MPI_INCLUDE_PATH})
target_link_libraries(
mpiService
${MPI_C_LIBRARIES}
)我个人不喜欢这个解决方案,因为我必须明确指定路径。任何其他提出的解决方案仍在用OpenMPI构建。如果我找到更好的选择,我会重新发布。
https://stackoverflow.com/questions/47860487
复制相似问题