繁体   English   中英

使用f2py时出现问题

[英]Problem using f2py

我有一些用fortran编写的例程,希望在我的python代码中使用。 快速的网络搜索让我了解到f2py,然后尝试了一下。 使用

 f2py -c numericalMethods.f -m numericalMethods

它似乎可以工作一段时间,直到在转换过程中产生很多错误为止。 为什么下面的代码无法与f2py一起工作?

  SUBROUTINE n_bezier(t, nx2, BezX, BezY)
  PARAMETER (N_SEG=130)
  PARAMETER (nmax=130)
  DOUBLE PRECISION t(nmax)
  DOUBLE PRECISION nx2(nmax)
  DOUBLE PRECISION BezX(N_SEG), BezY(N_SEG)
  DOUBLE PRECISION coeff(nmax)
  INTEGER i, j
  DOUBLE PRECISION r,fact


  do i = 1, N_SEG
    r = real(i) / real(N_SEG)
    BezX(i) = 0 
    BezY(i) = 0
    do j=1,nmax 
        coeff(j) = BICO(nmax,j) *
 .                 (1-r)**(nmax-j) * r**j
        print*, 'coeff for j= ', j, ' --> ', coeff(j) 
    if(coeff(j).ne.0) then
            BezX(i) = BezX(i) + coeff(j)*t(j)
            BezY(i) = BezY(i) + coeff(j)*nx2(j)
        endif
    enddo
  enddo  
  END

  function fact(n)
  INTEGER n, p
  DOUBLE PRECISION fact
     p = 1
     do i = 1, n
        p = p * i
     end do
     fact = p
  end

  FUNCTION BICO(N,K)
  BICO=ANINT(EXP(FACTLN(N)-FACTLN(K)-FACTLN(N-K)))
  RETURN
  END

  FUNCTION FACTLN(N)
  DIMENSION A(100)
  DATA A/100*-1./
  IF (N.LT.0) PAUSE 'negative factorial'
  IF (N.LE.99) THEN
    IF (A(N+1).LT.0.)  A(N+1)=GAMMLN(N+1.)
    FACTLN=A(N+1)
  ELSE
    FACTLN=GAMMLN(N+1.)
  ENDIF
  RETURN
  END


  FUNCTION GAMMLN(XX)
  REAL*8 COF(6),STP,HALF,ONE,FPF,X,TMP,SER
  DATA COF,STP/76.18009173D0,-86.50532033D0,24.01409822D0,
 .     -1.231739516D0,.120858003D-2,-.536382D-5,2.50662827465D0/
  DATA HALF,ONE,FPF/0.5D0,1.0D0,5.5D0/
  X=XX-ONE
  TMP=X+FPF
  TMP=(X+HALF)*LOG(TMP)-TMP
  SER=ONE
  DO 11 J=1,6
      X=X+ONE
      SER=SER+COF(J)/X
  11    CONTINUE
  GAMMLN=TMP+LOG(STP*SER)
  RETURN
  END

编辑: 是包含错误的日志文件。

将我最终可以解决问题的评论放入答案中:

遵循在网上https://cd34.com/blog/programming/python/mysql-python-and-snow-leopard- >注释37上找到的一些建议后,我用10.5 SDK替换了10.4文件夹。 并且stdarg.h错误不再。 不是很干净和正统,但它似乎可以工作。 .so文件现在已创建! 感谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM