Biblioteca F90 standard per Makefile
Domanda
Saluti a tutti,
Il tentativo di compilare usando g ++ e la necessità di collegare la f90 standard (o F77) anche librerie per alcuni codici sorgente FORTRAN nel mio Makefile. Non posso trovare il nome di essa nessuna parte.
Makerfile:
products: SlowDynamic.exe
SlowDynamic.exe: main.o SA.o mersenne.o CFE.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o MA_57.o blas.o MA_57_Depend.o Metis.o
g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
main.o: main.cpp
g++ -c -o main.o main.cpp
SA.o: SA.cpp
g++ -c -o SA.o SA.cpp
mersenne.o: mersenne.cpp
g++ -c -o mersenne.o mersenne.cpp
CFE.o: CFE.c
gcc -c -o CFE.o CFE.c
MA_57.o: MA_57.f
f77 -c -o MA_57.o MA_57.f
blas.o: blas.f
f77 -c -o blas.o blas.f
MA_57_Depend.o: MA_57_Depend.f
f77 -c -o MA_57_Depend.o MA_57_Depend.f
Metis.o: Metis.f
f77 -c -o Metis.o Metis.f
BCs.o: BCs.c
gcc -c -o BCs.o BCs.c
EMatrix.o: EMatrix.c
gcc -c -o EMatrix.o EMatrix.c
Numbering.o: Numbering.c
gcc -c -o Numbering.o Numbering.c
KMatrix.o: KMatrix.c
gcc -c -o KMatrix.o KMatrix.c
Solve.o : Solve.c
gcc -c -o Solve.o Solve.c
clean:
rm *.o Main.exe *.gpi
Compiler:
birch $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
Undefined first referenced
symbol in file
__f90_sfw_i4 MA_57.o
__f90_sfw_ch MA_57.o
__f90_sfw_r4 MA_57.o
__f90_ifw_ch MA_57.o
__f90_ifw_r4 MA_57.o
__nintf MA_57.o
__s_cmp blas.o
__r_sign MA_57_Depend.o
__f90_sifw MA_57.o
__f90_ssfw MA_57.o
__f90_stop blas.o
__f90_esfw MA_57.o
__f90_eifw MA_57.o
ld: fatal: Symbol referencing errors. No output written to SlowDynamic.exe
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `SlowDynamic.exe'
Risultati per l'esecuzione 'f77 -v hello.f'
amos $ f77 -v hello.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -v hello.f
### command line files and options (expanded):
### -f77=%all -ftrap=%none -v hello.f -lf77compat
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=%none -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -f77 -ftrap=%none -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -f77=%all -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
hello.f:
MAIN hellow:
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lf77compat -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o
Risultati per l'esecuzione 'f90 -v hello.f'
amos $ f90 -v hello.f
### command line files and options (expanded):
### -v hello.f
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=common -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o
Risultati per una compilazione di successo usando f77:
amos $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -c -o main.o main.cpp
In file included from main.cpp:16:
SA.h:85:9: warning: no newline at end of file
main.cpp:38:2: warning: no newline at end of file
g++ -c -o SA.o SA.cpp
In file included from SA.cpp:22:
SA.h:85:9: warning: no newline at end of file
In file included from SA.cpp:23:
CFE.h:25:8: warning: no newline at end of file
SA.cpp:468:4: warning: no newline at end of file
g++ -c -o mersenne.o mersenne.cpp
gcc -c -o CFE.o CFE.c
In file included from BCs.h:9,
from CFE.c:29:
fg_types.h:38:7: warning: no newline at end of file
In file included from CFE.c:29:
BCs.h:15:84: warning: no newline at end of file
In file included from CFE.c:32:
KMatrix.h:12:171: warning: no newline at end of file
In file included from CFE.c:34:
Solve.h:9:91: warning: no newline at end of file
CFE.c: In function `CFE':
CFE.c:145: warning: `return' with a value, in function returning void
gcc -c -o BCs.o BCs.c
In file included from BCs.h:9,
from BCs.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from BCs.c:9:
BCs.h:15:84: warning: no newline at end of file
BCs.c:74:2: warning: no newline at end of file
gcc -c -o EMatrix.o EMatrix.c
In file included from EMatrix.h:9,
from EMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
EMatrix.c:78:2: warning: no newline at end of file
gcc -c -o Numbering.o Numbering.c
In file included from Numbering.h:8,
from Numbering.c:8:
fg_types.h:38:7: warning: no newline at end of file
Numbering.c:144:3: warning: no newline at end of file
gcc -c -o KMatrix.o KMatrix.c
In file included from KMatrix.h:8,
from KMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from KMatrix.c:9:
KMatrix.h:12:171: warning: no newline at end of file
KMatrix.c:194:2: warning: no newline at end of file
gcc -c -o Solve.o Solve.c
In file included from Solve.c:8:
Solve.h:9:91: warning: no newline at end of file
Solve.c:95:2: warning: no newline at end of file
f77 -c -o MA_57.o MA_57.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57.o MA_57.f
MA_57.f:
ma57i:
ma57a:
ma57b:
ma57c:
ma57q:
ma57r:
ma57u:
ma57s:
ma57t:
ma57d:
ma57e:
ma57g:
ma57j:
ma57k:
ma57f:
ma57l:
ma57m:
ma57n:
ma57o:
ma57p:
ma57w:
ma57x:
ma57y:
ma57v:
ma57h:
ma57z:
f77 -c -o blas.o blas.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o blas.o blas.f
blas.f:
sgemm:
stpsv:
isamax:
xerbla:
lsame:
sgemv:
f77 -c -o MA_57_Depend.o MA_57_Depend.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57_Depend.o MA_57_Depend.f
MA_57_Depend.f:
mc47a:
mc47b:
mc71a:
mc34a:
mc59a:
mc59b:
mc59c:
mc59d:
mc59e:
mc59f:
ma27i:
ma27a:
ma27b:
ma27c:
ma27g:
ma27h:
ma27u:
ma27j:
ma27k:
ma27l:
ma27m:
ma27n:
ma27o:
ma27p:
ma27q:
ma27r:
mc64i:
mc64a:
mc64b:
mc64d:
mc64e:
mc64f:
mc64r:
mc64s:
mc64q:
mc64u:
mc64w:
mc21a:
mc21b:
fd15a:
f77 -c -o Metis.o Metis.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o Metis.o Metis.f
Metis.f:
metis_nodend:
f77 -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
Soluzione
Quale versione di GCC stai usando? Il compilatore fortran in GCC è completamente cambiata nel corso del tempo (G77 vs gfortran) - quindi la risposta corretta è molto dipendente da versioni esatte. E 'stato un po' che avevo bisogno di fare questo (e ho usato le vecchie versioni del G77 - quindi le cose potrebbe essere cambiato), ma mi ricordo un paio di opzioni, al momento:
- Prova collegamento mediante il G77 e includere -lstdc biblioteca ++ (e possibilmente -lm?)
- Prova collegamento mediante g ++ e includere librerie -lg2c -lm (e possibilmente -lfrtbegin?)
Se si utilizza più recente gfortran poi -lgfortran dovrebbe funzionare se il collegamento con g ++ e -lstdc ++ se il collegamento con gfortran.
Anche voi volete fare in modo che il g ++ e comandi F77 nel makefile sono in esecuzione i comandi che si aspetta che siano in esecuzione (ad esempio, non si accede eseguibili in directory imprevisti o diverse versioni / incompatibili).
EDIT: Dalle tue modifiche recenti alla tua domanda in cui sembra essere cercando di collegare F77 del SUN compilatore con il CCG g ++. Non credo che questo sia possibile. Provate ad usare G77 del GCC o gfortran invece di SUN F77.
Altri suggerimenti
Fortran non ha "le librerie standard". Ha un sacco di funzioni intrinseche, ma sono parte del linguaggio, definito dallo standard.
Le risposte ai commenti, in quanto il campo di commento è un po 'troppo restrittiva per quanto riguarda il numero di caratteri:
@ Michael - Sì, si può dire che. Ma, ancora, non è lo stesso che con altri linguaggi si sono probabilmente abituati. Quello che voglio dire è questo: quando si compila e costruire un programma FORTRAN compilatore o linker non richiede di includere librerie nel processo. E 'cosa interna del compilatore. Questo vale per "standard" (funzioni intrinseche e simili).
Se utilizzi alcune funzioni esterne o subroutine (ad esempio, alcune routine di stampa) allora avete bisogno di includere separatamente.
Ma se si sta utilizzando le funzioni matematiche standard che fanno parte del linguaggio, allora il vostro lavoro è finito. Si scrive il programma e compilare e costruirlo. Non c'è bisogno di sapere dove e come queste funzioni sono implementate, dove ci implementazioni sono memorizzate e così via. Questo è il lavoro del compilatore.
Infine fissata la soluzione con un mix di tutti quanti consigli.
Una volta compreso ero utilizzando SUN anziché GCC sono passata alla compilazione con cc (gcc), CC (g ++) e f95 (F77).
Nei risolto il problema era incollando l'intera linea linker f77 risposte dettagliato (sopra in post principale) ed eliminando gradualmente le parti che non ha partecipato. Alla fine è stato aggiunto il seguente testo:
-t -R / opt / SUNWspro / lib / SPARC: / opt / SUNWspro / -yP lib, / opt / SUNWspro / lib / SPARC: / opt / SUNWspro / prod / lib / SPARC: / opt / SUNWspro / lib: / opt / SUNWspro / prod / lib: / usr / ccs / lib: / lib: / usr / lib -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic - lmtsk -lm -lc