我正在使用M. Wimmer写的library来计算pfaffians。
我在python中有很大的代码,在其中我从pfaffian包中调用该函数。
但是,我需要多次计算这些pfaffian,因此我想提高效率(使用探查器检查了pfaffian的计算会消耗大量时间)。
因此,我想使用f2py工具以python代码从Fortran库中调用函数。问题是,我只需要函数skpfa即可,该函数依赖于属于该库的其他函数。
我尝试使用here中的指令来链接静态库libpfapack.a,但是在导入输出模块(我称为pfaf.so)时,出现错误消息:
./pfaf.so: undefined symbol: skpfa_
我读到问题可能出在我要链接静态库的事实上,因此我使用命令从提供的源创建了动态库:
gfortran -O3 -fimplicit-none -c -fPIC file.f -o file.o
所有源文件,然后
gfortran -shared $(OBJECTS) -o libpfapack
我创建了以下签名文件pfaf.pyf:
python MODULE pfaffian
PUBLIC
INTERFACE
SUBROUTINE SKPFA(A, PFSFF, UPLO, MTHD, INFO)
double precision, intent(in) :: A(:,:)
double precision, intent(inout) :: p
character, intent(in), optional :: UPLO, MTHD
integer, intent(out), optional :: info
end subroutine skpfa
end interface
end python module pfaffian
然后我调用:
f2py -c --lower --fcompiler=gnu95 pfaf.pyf -L{path to directory with libpfapack} -lpfapack
我收到一条消息
/usr/bin/ld: cannot find -lpfapack
如果我在不带-lpfapack的情况下调用f2py命令,则这些东西会编译并生成文件pfaf.so,但是我在python中遇到错误:
./ pfaf.so:未定义符号:skpfa _。
有人知道如何解决吗?