[완료]포트란 컴파일 에러좀 도와주세요..

queenmedley의 이미지

어제도 질문을 드렸는데 해결하고 나도 에러가 연속이군요..
ioapi-3.0 컴파일을 하고 있는데 아래와 같이 에러가 발생합니다.

*****************************************************************

make[1]: Entering directory `/home/wonhae/Modeling/ioapi-3.0/m3tools'
cd /home/wonhae/Modeling/ioapi-3.0/Linux2_x86_64gfort; gfortran /home/wonhae/Modeling/ioapi-3.0/Linux2_x86_64gfort/datshift.o -L/home/wonhae/Modeling/ioapi-3.0/Linux2_x86_64gfort -L/usr/share/pvm3/lib/LINUX64 -lioapi -lnetcdf -lpvm3 -fopenmp -o datshift
/home/wonhae/Modeling/ioapi-3.0/Linux2_x86_64gfort/datshift.o: In function `MAIN__':
datshift.f:(.text+0xe): undefined reference to `iargc_'
collect2: ld returned 1 exit status
make[1]: *** [datshift] Error 1
make[1]: Leaving directory `/home/wonhae/Modeling/ioapi-3.0/m3tools'
make: *** [all] Error 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

datshift.f 코드는 아래구요..
코드에 보면 IARGC 라는게 선언되어 있는데 이걸 의미하는거같기도 한데요..
제가 그냥 외부라이브러리나 다른 선언없이 그냥 IARGC() 사용해서 코딩을 해봐도 에러가 안납니다.
그리고
~~~~~~~~~~~~~~~~~~~~~
nm datshift.o | grep -i iargc
해보니
U iargc_ 라고 뜹니다.
~~~~~~~~~~~~~~~~~~~~~~~~
'undefine reference to 'iargc_' 이거 어떻게 해야될까요..
make 한줄 해결하는데 하루넘게 걸리네요..아직 여러줄 남았는데..에휴..

~~~~~~~~~~~~~~~~datshift.f~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IMPLICIT NONE

C........... EXTERNAL FUNCTIONS and their descriptions:

INTEGER IARGC
INTEGER GETDATE
INTEGER GETNUM
INTEGER JULIAN
INTEGER STR2INT

EXTERNAL IARGC, GETDATE, GETNUM, JULIAN, STR2INT

C........... PARAMETERS and their descriptions:

CHARACTER*80 PROGVER
DATA PROGVER /
&'$Id:: datshift.f 49 2007-07-06 16:20:50Z coats@borel $'
& /

C........... LOCAL VARIABLES and their descriptions:

INTEGER ARGCNT ! number of command-line args, from IARGC()
INTEGER DAY
INTEGER EGDATE ! output gregorian date
INTEGER MON
INTEGER JDATE ! internal julian date
INTEGER JTIME ! internal julian time
INTEGER SGDATE ! input gregorian date
INTEGER TSTEP ! time step for changing dates
INTEGER YR
CHARACTER*80 DATBUF
CHARACTER*80 STEPBUF

C***********************************************************************
C begin body of program DATSHIFT

ARGCNT = IARGC()
IF ( ARGCNT .EQ. 2 ) THEN

CALL GETARG( 1, DATBUF )
CALL UPCASE( DATBUF )
SGDATE = STR2INT( DATBUF )

CALL GETARG( 2, STEPBUF )
TSTEP = STR2INT( STEPBUF )

READ( DATBUF, * ) SGDATE

END IF

IF ( ARGCNT .NE. 2 .OR.
& SGDATE .GT. 99999999 .OR.
& SGDATE .LT. 1 ) THEN

WRITE( *,92000 ) ' ', ' ',
& 'Program DATSHIFT takes calendar date (in form YYYYMMDD)',
& 'and a number of days as an increment and returns the date',
& 'in Gregorian-date form "YYYYMMDD".',
& ' ',
& ' Usage: "datshift [ <+/- days>]" ', ' ',
& '(if the command-line arguments are missing, prompts the ',
& 'user for them)',
& ' ',
&'See URL http://www.baronams.com/products/ioapi/AA.html#tools',
&' ',
&'Program copyright (C) 1992-2002 MCNC and Carlie J. Coats, Jr.',
&'and (C) 2002-2007 Baron Advanced Meteorological Systems, LLC',
&'Released under Version 2 of the GNU General Public License.',
&'See enclosed GPL.txt, or URL',
&'http://www.gnu.org/copyleft/gpl.html',
&' ',
&'Comments and questions are welcome and can be sent to',
&' ',
&' Carlie J. Coats, Jr. coats@baronams.com',
&' Baron Advanced Meteorological Systems, LLC.',
&' 920 Main Campus Drive, Suite 101',
&' Raleigh, NC 27606',
&' ',
&'Program version: ',
&PROGVER,
&'Program release tag: $Name$',
&' '

SGDATE = GETDATE( 19950701,
& 'Enter date (YYYYMMDD) or (YYYYDDD)' )

TSTEP = GETNUM( -9000, 9000, 1,
& 'Enter days increment' )

WRITE( DATBUF, 92010 ) SGDATE

END IF ! if argcnt=2, or not

C......... Convert date formats

IF( SGDATE .GT. 9999366 ) THEN
YR = STR2INT( DATBUF( 1:4 ) )
MON = STR2INT( DATBUF( 5:6 ) )
DAY = STR2INT( DATBUF( 7:8 ) )

JDATE = 1000 * YR + JULIAN( YR, MON, DAY )
JTIME = 120000

ELSE
JDATE = SGDATE
JTIME = 120000

ENDIF

TSTEP = TSTEP * 240000

CALL NEXTIME( JDATE, JTIME, TSTEP )

YR = JDATE / 1000

CALL DAYMON( JDATE, MON, DAY )

EGDATE = YR * 10000 + MON*100 + DAY

WRITE( *,92010 ) EGDATE

CALL EXIT( EGDATE )

C****************** FORMAT STATEMENTS ******************************

C........... Informational (LOG) message formats... 92xxx

92000 FORMAT( 5X, A )

92010 FORMAT( I8.8 )

END
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

geoplab의 이미지

아래 라인을 카먼트로 처리한 후 한번 컴파일해 보세요.
제 생각에는 IARGC 이 intrinsic function 이라서 EXTERNAL 로 할 필요는 없을거 같군요.

EXTERNAL IARGC, GETDATE, GETNUM, JULIAN, STR2INT

아래 링크 참조하세요.

http://gcc.gnu.org/onlinedocs/gfortran/IARGC.html

queenmedley의 이미지

님 말씀대로 커멘트 처리를 하니 그 부분 통과하네요..
그 파일 말고 다른 몇몇 파일이 다 external 로 선언이 되어 있는데
다 해결되었습니다.
저거 말고도 C 코드도 범위가 안맞는 변수선언으로 에러가 몇개 있더라구요..
저 ioapi는 여러 운영체제랑 컴파일별로 코딩을 다 해놨던데..
작성하시는 분이 여러 개로 하다보니 헷갈렸는 모르겠네요..
암튼 너무 고맙습니다. 복받으시구요..
부산에 계시는 분이면 막걸리라도 한잔 사드리고 싶네요. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.