Я использую f2py для вызова процедуры LAPACK из python (а именно DGEQP3). Сначала я создал файл pyf
, чтобы создать более удобный интерфейс.Ядро сбрасывается после успешного вызова f2py LAPACK
f2py -h dgeqp3.pyf -m dgeqp3 SRC/dgeqp3.f
Этот файл теперь выглядит следующим образом:
! -*- f90 -*-
! Note: the context of this file is case sensitive.
python module dgeqp3 ! in
interface ! in :dgeqp3
subroutine dgeqp3(m,n,a,lda,jpvt,tau,work,lwork,info) ! in :dgeqp3:SRC/dgeqp3.f
integer :: m
integer :: n
double precision dimension(lda,0) :: a
integer intent(hide),depend(a) :: lda=shape(a,0)
integer intent(in, out), dimension(n), depend(n) :: jpvt
double precision intent(out), depend(m), dimension(m), :: tau
double precision intent(out), depend(lwork), dimension(lwork) :: work
integer :: lwork
integer intent(out) :: info
end subroutine dgeqp3
end interface
end python module dgeqp3
Я строю библиотеку так:
f2py -c dgeqp3.pyf SRC/dgeqp3.f -lblas -llapack -latlas
Я создал следующий скрипт для вызова подпрограммы, которая, кажется, работая безупречно.
import dgeqp3
import numpy as np
print(np.version.version)
A = np.array([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0])
jpvt = np.array([0,0,0])
lwork = 10
j,t,w,i = dgeqp3.dgeqp3(3, 3, A, jpvt, lwork)
Однако, как раз перед завершением программы, я получаю
*** Error in `python': free(): invalid next size (fast): 0x0000000002bb8e60 ***
Aborted (core dumped)
Я использую Numpy версию 1.8.2 и собрал Либерал DGEQP3 из LAPACK 3.5.0, на 64-битном Ubuntu 14.04 с ядром 3.13.0-43-generic. Что может пойти не так?