У меня есть очень простая программа, использующая PETSC
#include "PETSC/petsc.h"
#include "PETSC/petscsys.h"
#include "PETSC/petscmat.h"
int main(int argc, char *argv[]) {
PetscMPIInt rank,size;
PetscInitialize(&argc,&argv,0,0);
MPI_Comm_size(PETSC_COMM_WORLD,&size);
MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d, rank = %d\n",size,rank);
PetscSynchronizedPrintf(PETSC_COMM_WORLD,"synchronized rank = %d\n",rank);
MPI_Barrier(PETSC_COMM_WORLD);
PetscFinalize();
return 0;
}
Однако я получил неопределенные ссылки на PETSC_COMM_WORLD
, PetscInitialize
и другой мусор, когда пытался скомпилировать с помощью mpic++.
Сейчас я пытаюсь использовать build
и cmake. Это моя попытка CMakeLists
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(checkMPI)
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules")
set(PETSC_ARCH linux-gnu)
set(PETSC_DIR l${PROJECT_SOURCE_DIR}/third-party/petsc)
FIND_PACKAGE(PETSc REQUIRED)
INCLUDE_DIRECTORIES(${PETSC_INCLUDES})
ADD_DEFINITIONS(${PETSC_DEFINITIONS})
ADD_EXECUTABLE(checkMPI checkMPI.cpp)
TARGET_LINK_LIBRARIES(checkMPI ${PETSC_LIBRARIES})
Кроме того, у меня есть каталог cmake-modules
, содержащий cmake-модули для PETSc.
Однако, когда я пытаюсь сгенерировать make-файл, набрав ccmake ..
, а затем c
, я получаю вывод
CMake Error at cmake-modules/FindPETSc.cmake:127 (message):
The pair PETSC_DIR=l/directory/HPC/third-party/petsc
PETSC_ARCH=linux-gnu do not specify a valid PETSc installation
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:108
(message):
PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH.
(missing: PETSC_INCLUDES PETSC_LIBRARIES PETSC_EXECUTABLE_RUNS)
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:315
Кто-нибудь может помочь?