Я пытаюсь обернуть функцию С++, которая не принимает никаких входных данных и возвращает коммуникатор MPI.
Фу.ч
class Foo{
public:
Foo(MPI_Comm _comm){
_comm = comm;
}
MPI_Comm getMPIComm(){
return comm
}
virtual void Foo1() = 0
Я пробовал следующее:
источник.pyx
cimport mpi4py.MPI as MPI
from mpi4py.libmpi cimport *
cdef extern from Foo.h:
cdef cppclass Foo:
Foo(MPI_Comm _comm)
MPI_Comm getMPIComm()
void Foo1()
cdef class pyFoo:
cdef Foo *thisptr
def __cinit__(self,MPI.Comm _comm):
pass
def get MPIComm(self):
c_comm = self.thisptr.getMPIComm()
return <MPI.Comm> c_comm
def Foo1(self):
pass
Этот код скомпилирован, и я смог написать код Python, который наследует этот класс. Однако, когда я попытался получить доступ к getMPIComm на уровне Python, я столкнулся с ошибкой сегментации, и ошибка, выдаваемая valgrind:
Access not within mapped region at address 0x8
Означает ли это, что я неправильно обернул getMPIComm()? Кто-нибудь знает, как я должен подойти к этому?