2016-10-14 2 views
0

При установке программного обеспечения под названием сноб, есть файл `date.f»Неопределенная ссылки на fdate_

function date(n) 
character*24 fdate,date 
external fdate 
date=fdate() 
return 
end 

Компиляция с fort77, я столкнулся с такой ошибкой:

fort77-4511-1.c:(.text+0x2f): undefined reference to `fdate_' 
collect2: error: ld returned 1 exit status 

Я пытался и gfortran, и g77 без успеха. Я пробовал флаги -fno-second-underscore с fort77 и -fno-scoring для gfortran, но до сих пор безуспешно.

Другие предложили мне обратиться к Compiling with gfortran: undefined reference to iargc_

Во-первых, я заменил external с intrinsic и получите:

/usr/bin/f77 -c date.f 
    date: 
Error on line 17: Declaration error for fdate: unknown intrinsic  function 
/usr/bin/f77: aborting compilation 
make: *** [date.o] Error 25 

Затем я удалил fdate из external заявления и получить:

/usr/bin/f77 -c date.f 
    date: 
Error on line 17: syntax error 
/usr/bin/f77: aborting compilation 
make: *** [date.o] Error 25 

Волю кто-нибудь мне помогает?

+0

Я не знаю, почему вы должны иметь эту проблему , эта функция legacy (не Fortran 77) поддерживается gfortran https://gcc.gnu.org/onlinedocs/gfortran/FDATE.html (попробуйте без каких-либо опций о un derscores), хотя было бы предпочтительнее перейти на стандартную дату и время. – tim18

+0

Почему вы используете f77? Тебе обязательно? если нет, используйте стандарты f90 или 2003. –

+0

Вы должны показать код. Проголосовал бы за закрытие, но сэкономил бы мой голос на потом. Моя ставка - это дубликат. Есть ли «внешний fdate» в любом месте кода? Если да, это дубликат. –

ответ

1

Во-первых, если fdate является нестандартным встроенной функцией вашего компилятора, то external утверждение является незаконным, как описано в Compiling with gfortran: undefined reference to iargc_

Вы утверждаете, что удаление строки и ввод intrisic вместо не помогло. В этом случае я предполагаю, что ваш компилятор не имеет fdate() как неотъемлемой функции, но вы все равно должны сообщить нам, что именно компилятор напечатал, когда вы это пробовали.

В этом случае вам просто не повезло. Вы должны найти код для fdate() где-нибудь, или вам нужно изменить код, чтобы он не вызывал fdate(), или вы должны сами реализовать fdate().

Я не могу реализовать fdate() здесь, для вас это слишком много для ответа на этом сервере.

Последняя возможность заключается в использовании лучшего компилятора. Отцепите древние и давно устаревшие fort77 из прошлого века и используя что-то из этого века. Например, бесплатно gfortran или g95 или купить какой-нибудь коммерческий компилятор. Это тебе решать.


Вот рабочий пример:

print *, date(1) 

contains 

    function date(n) 
    character*24 fdate,date 
! external fdate 
    intrinsic fdate 
    date=fdate() 
    return 
    end 

end 

компиляции и запуска:

> gfortran fdate.f90 
> ./a.out 
Fri Oct 21 10:12:25 2016 

с gfortran 4.8.3

+0

Большое спасибо за ваше терпение! Я пробовал gfortran и g95, но без везения. Может быть, я должен искать fdate() из других компиляторов и интерпретировать его сам. Еще раз спасибо за вашу любезную помощь! –

+0

Вы удалили 'external'? Вы должны. Измените свой вопрос и опишите, что вы пытались выполнить, включая команды и сообщения об ошибках. –

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