2016-08-01 2 views
1

У меня возникли проблемы с компиляцией Fortran в модуль расширения Python, когда код Fortran включает вызовы функции печати или записи.F2PY не может скомпилировать Fortran с печатью или написать

Я нахожусь в Windows 8.1 с gfortran (через mingw-w64) и установленным MSVC-компилятором для Python 2.7. Используемый дистрибутив Python - Anaconda.

test.f

subroutine test (a) 

    integer, intent(out) :: a 

    print *,"Output from test" 

    a = 10 

end subroutine test 

Запуск f2py -c -m --fcompiler=gnu95 test test.f90 Я вижу эти ошибки:

test.o : error LNK2019: unresolved external symbol _gfortran_st_write referenced in function test_ 
test.o : error LNK2019: unresolved external symbol _gfortran_transfer_character_write referenced in function test_ 
test.o : error LNK2019: unresolved external symbol _gfortran_st_write_done referenced in function test_ 
.\test.pyd : fatal error LNK1120: 3 unresolved externals 

Но он отлично работает, когда я закомментируйте печать (или запись) заявление.

Странная вещь, которую я заметил, заключается в том, что она, похоже, использует Python для ArcGIS.

compile options: '-Ic:\users\[username]\appdata\local\temp\tmpqiq6ay\src.win-amd64- 
2.7 -IC:\Python27\ArcGISx6410.3\lib\site-packages\numpy\core\include -IC:\Python 
27\ArcGISx6410.3\include -IC:\Python27\ArcGISx6410.3\PC -c' 
gfortran.exe:f90: test.f90 

Любая помощь была бы принята с благодарностью.

+0

Вы не правильно связываете библиотеку времени исполнения gfortran (libgfortran). Почему вы используете '--fcompiler = gnu95'? –

ответ

0

Ответ на мой вопрос.

шаги, чтобы исправить:

  1. Игнорирование или скраб MinGW-w64 установки. Он не был нужен как Анаконда поставляется с MinGW
  2. Добавить C_INCLUDE_PATH в системных переменных среды Windows, и указать, что в заголовочном папке, расположенной в пределах пути анаконды (например C:\userdata\[user]\Miniconda\include)
  3. Изменение --compiler=msvc в --compiler=mingw32
  4. В моей case, он пытался использовать numpy из установки ArcGIS. Чтобы исправить, я должен был conda uninstall numpy, принять к сведению всех пакетов, удаленных, а затем conda install [list of packages that were previously removed]

Фортран Теперь код компилируется отлично и может быть вызвана из Python.