我有一个使用PETSC的非常基本的程序
ForEachPair(5, 5, (x, y) =>
{
Console.Write(x + "," + y);
});
public void ForEachPair(int width, int height, Action<int, int> callback)
{
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
callback(i, j);
}
}
}
然而,当我尝试使用mpic ++进行编译时,我得到了 #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
和cmake。这是我build
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})
,其中包含PETSc的cmake-modules
然而,当我尝试通过键入cmake-modules
然后ccmake ..
来生成makefile时,我得到了输出
c
任何人都可以提供帮助吗?
答案 0 :(得分:1)
根据FindPETSC.cmake,PETSC_ARCH
的默认选项似乎是:
linux-gnu-c-debug
linux-gnu-c-opt
x86_64-unknown-linux-gnu
i386-unknown-linux-gnu
或manual build时使用的那个。
CMake尝试查找文件${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h
或
${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h
。