Я выясняю, как работает haskell-mpi, переписывая привязку. Я пытаюсь повторно использовать установку MPICH, которая была установлена путем установки PETSc (которая работает нормально). Вопрос: make main
дает мне правильный модуль в GHCi, но когда я запрашиваю вычисление commWorld, компоновщик жалуется, что не может найти символ MPI_COMM_WORLD (который, однако, входит в область действия make-файла).
Что я делаю не так? заранее спасибо
ошибка:
ByteCodeLink: can't find label
During interactive linking, GHCi couldn't find the following symbol:
MPI_COMM_WORLD
Основные.chs :
type MPIComm = {# type MPI_Comm #}
newtype Comm = MkComm { fromComm :: MPIComm } deriving (Eq, Show)
foreign import ccall "&MPI_COMM_WORLD" commWorld_ :: Ptr MPIComm
foreign import ccall "&MPI_COMM_SELF" commSelf_ :: Ptr MPIComm
commWorld, commSelf :: Comm
commWorld = MkComm <$> unsafePerformIO $ peek commWorld_
commSelf = MkComm <$> unsafePerformIO $ peek commSelf_
make-файл:
PETSC_DIR_ARCH = ${PETSC_DIR}/arch-darwin-c-debug
PETSC_DIR_ARCH_INCLUDE = ${PETSC_DIR_ARCH}/include
main :
c2hs Main.chs -C -I${PETSC_DIR_ARCH}/include -C -I${PETSC_DIR}/include
ghci Main.hs -L${PETSC_DIR_ARCH}/lib -lpetsc -lmpich
мпи.ч
typedef int MPI_Comm;
#define MPI_COMM_WORLD ((MPI_Comm)0x44000000)
#define MPI_COMM_SELF ((MPI_Comm)0x44000001)