2012-07-25 31 views
0

我遇到了通过f2py编译的问题。我有一个带有几个子程序的f90模块。在python脚本中使用它已经被编译好了。但是,现在当我尝试编译它并构建它,它抱怨此错误:f2py包装编译错误:设置数组的形状

build/src.macosx-10.5-x86_64-2.7/PyCosmology/sims/fort/read_sim-f2pywrappers2.f90:355.17: 

    allocate(d()) 
      1 
Error: Shape specification for allocatable scalar at (1) 

它也有两个其他错误,但这些只是导致d()没有被正确地分配在这里。你可以看到它正在编译的文件是f2py包装器。更奇怪的是,当我真正看到它指向的封装文件,行355是事实:

 allocate(d(s(1),s(2))) 

,所以我不知道为什么编译器告诉我有在分配声明没有形状符。因此,我不知道如何解决它!

请注意,我已经改变了模块有点自去年它编译正确,但它发生这个错误我都没有碰过可言,也没有我摸着它存在于特定的子程序阵列。

+0

经过一番挖掘,我发现错误发生的子程序不是我需要从python调用的子程序(它只需要被模块中的子程序调用)。但是,在将这些子例程保留在文件之前,我遇到了麻烦 - 请参阅http://stackoverflow.com/questions/11148841/f2py-giving-redefinition-of-foo-previous-definition-was-here,这样禁止那么,有什么办法让f2py不知道为这些未使用的例程创建接口吗?或者我必须手动编辑pyf文件? – StevenMurray 2012-07-25 01:02:16

+1

是的,在f2py中,只需使用命令行选项“only:routine1 routine2:”选择某些例程,或者“跳过”以避免特定的例程。 – DaveP 2012-07-25 01:22:02

+0

@DaveP非常感谢。我正在使用numpy.distutils进行编译和构建,因此有没有可以将这些命令放在setup.py脚本中的地方? – StevenMurray 2012-07-25 01:34:25

回答

0

提花出来。

我试图分配给一个整数。抱歉。