2016-01-25 3 views
0

Я использую gfortran [GNU Fortran (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)] на Fedora 20 x86_64, чтобы скомпилировать кучу кода Fortran 77, который относится к 'iargc' функции следующим образом:Компиляция с gfortran: неопределенная ссылка на iargc_

bin2D2nc.f:31: integer iargc,strlen1

bin2D2nc.f:32: external iargc,strlen1

bin2D2nc.f:44: i=iargc()

Когда делают скрипт достигает компиляции COMAND, приведенную ниже,

gfortran -O3 -ffixed-line-length-132 -fall-intrinsics -I/home/santiago/Install/netcdf_sam/include -o bin2D2nc -I./SRC ./SRC/bin2D2nc.f ./SRC/hbuf_lib.f ./SRC/cape.f ./SRC/cin.f -L/home/santiago/Install/netcdf_sam/lib -lnetcdf -L/usr/lib64 -lpthread 

Я получаю эти сообщения:

bin2D2nc.f:(.text+0x14): undefined reference to `iargc_'

collect2: error: ld returned 1 exit status

make: ** [bin2D2nc] Erro 1

Я не автор этого кода. Насколько я знаю, я правильно настроил пути библиотеки в makefile.

Я обнаружил, что «iargc» - это рутина для обратной совместимости с GNU Fotran 77, но я не понимаю его глубоко.

Может ли кто-нибудь посоветовать превзойти эту проблему?

+0

Всегда используйте тег [tag: fortran] и добавляйте только тег версии, где необходимо различать. –

+0

IARGC не является внешней функцией. Или это может быть одно, но вы не предоставляете его. Это неотъемлемо. Вы должны использовать 'INTRINSIC IARGC' или просто удалить' IARGC' из оператора 'EXTERNAL'. Это остатки FORTRAN 66, а не 77. Я закрою этот вопрос как дубликат после того, как найду оригинал. –

+0

@ vladimir-f, спасибо за ваши ценные комментарии. Я думаю, вы можете оставить оба вопроса, так как они не совсем то же самое. Начинающие, как и я, вероятно, не будут видеть, что эти вопросы настолько похожи. –

ответ

3

Проблема очень похожа на Fixing FORTRAN IV warning: "The number of arguments is incompatible with intrinsinc procedure, assume 'external' ", но разница в том, что в другом вопросе присутствовала внешняя функция, и сходство с внутренним было непреднамеренным, но вы вызываете внутреннее назначение.

Заявление

EXTERNAL IARGC 

означает, что IARGC является внешней или внутренней функции в Fortran 66, а в «современном Фортране» 77, а позже это означает, что это только внешняя функция.

Но вам нужно вызвать внутреннюю функцию https://gcc.gnu.org/onlinedocs/gfortran/IARGC.html.

Вы должны использовать

INTRINSIC IARGC 

или даже просто удалить IARGC из EXTERNAL заявления, ничего не добавляя еще. Затем компилятор прекратит поиск несуществующей внешней функции и будет использовать внутреннюю.

Последнее примечание, IARGC само по себе не является стандартным. Fortran, ut здесь не имеет значения.

 Смежные вопросы

  • Нет связанных вопросов^_^