2014-12-25 1 views
1

У меня есть простой FORtran код следующим образом:Assembler ошибка при использовании инструмента f2py с FORtran кодом

subroutine square_cube(i, isquare, icube) 
     integer, intent(in) :: i 
     integer, intent(out) :: isquare, icube 
     isquare = i**2 
     icube = i**3 
    end subroutine square_cube 

    subroutine hellofortran (n) 
     integer n 

     do 100 i=0, n 
      print *, "Fortran says hello" 
100  continue 
    end subroutine hellofortran 

    program xx 
     implicit none 
     integer :: i, isq, icub 
     i = 4 
     call square_cube(i, isq, icub) 
     print*, "i,i^2,i^3=", i, isq, icub 
     call hellofortran (i) 
    end program xx 

Эта программа отлично работает, когда я построить и запустить его на Code :: Blocks 13.12. This и this post предлагают изменить имя модуля python или расширение источника fortran. Я переименовал источник с расширениями .f90 и '.f95', и все же он не дает ошибок в Code :: Blocks.

Я использую Cygwin для всего этого. Когда источник Fortran скомпилирован, я получаю .o и файл .exe. Когда я пытаюсь построить FORtran кода, используя f2py -c -m fmod test1.f95 Я всегда получаю некоторые ошибки ассемблера, как:

.... 
E:\cygwin64\tmp/cc6Dk38U.s:34: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:35: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:39: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:41: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:43: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:58: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:59: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:62: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:63: Error: invalid instruction suffix for `push' 
E:\cygwin64\tmp/cc6Dk38U.s:66: Error: invalid instruction suffix for `push' 
.... 
error: Command "/cygdrive/e/g95/bin/g95 -ffixed-form -fno-second-underscore -O -I/tmp/tmpKd7WH9/src.cygwin-1.7.33-x86_64-2.7 -I/usr/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c -c test1.f95 -o /tmp/tmpKd7WH9/test1.o" failed with exit status 1 

У меня есть g95 компилятор Фортрана.

В чем может быть проблема?

+0

Не используйте теги, специфичные для версии, без основного тега ('fortran') в следующий раз. –

ответ

1

Я использовал компилятор g95, который генерировал 32-битный код, а все другие инструменты, которые я использовал, генерировали 64-битный код. Я использовал gfortran вместо g95, и получил правильный результат. Мне пришлось отдельно установить gfortran с помощью MinGW.