Bibliothèque F90 standard pour Makefile
Question
Bonjour à tous,
Essayer de compiler en utilisant g ++ et la nécessité de lier le F90 standard (ou F77) même des bibliothèques pour certains codes sources Fortran dans mon Makefile. Je ne peux pas trouver le nom de partout.
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'
Résultats pour l'exécution '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
Résultats pour l'exécution '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
Résultats pour une compilation réussie en utilisant 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
La solution
Quelle version de GCC utilisez-vous? Le compilateur Fortran dans GCC a complètement changé au fil du temps (G77 vs gfortran) - donc la réponse correcte est très dépendante des versions exactes. Cela a été un moment que je devais le faire (et j'utiliser les anciennes versions du G77 - si les choses peuvent avoir changé) mais je me souviens deux options étaient à l'époque:
- Essayez lien en utilisant G77 et inclure -lstdc bibliothèque ++ (et peut-être -lm?)
- Essayez lien en utilisant g ++ et inclure (et peut-être -lfrtbegin?) De -lm de bibliothèques
Si vous utilisez plus récent gfortran alors -lgfortran devrait fonctionner si la liaison avec g ++ et ++ -lstdc si la liaison avec gfortran.
Vous voulez également vous assurer que le g ++ et les commandes de F77 dans votre makefile sont en cours d'exécution des commandes que vous les attendez à en cours d'exécution (par exemple ne pas accéder à executables dans des répertoires inattendus ou différents / versions incompatibles).
EDIT: A partir de vos modifications récentes à votre question, vous semblez essayer de relier le F77 du compilateur SUN avec le CCG g ++. Je ne pense pas que ce soit possible. Essayez d'utiliser le G77 de GCC ou gfortran au lieu de SUN F77.
Autres conseils
Raugnar,
Je vous renvoie à ma réponse href="https://stackoverflow.com/questions/662904/unix-symbol-referencing-error/662953#662953"> à votre question précédente sur les symboles non résolus .
Il suffit de lancer:
f77 -v something.f
sur un programme Fortran90 autonome et le compilateur révélera exactement qui prennent en charge les bibliothèques sont liées par défaut.
Fortran ne pas "bibliothèques standard". Il a un grand nombre de fonctions intrinsèques, mais ils font partie de la langue, définie par la norme.
Les réponses aux commentaires, puisque le champ de commentaire est un peu trop restrictive en ce qui concerne le nombre de caractères:
@ Michael - Oui, vous pouvez dire. Mais, encore, ce n'est pas la même chose que d'autres langues que vous êtes probablement habitué. Ce que je veux dire est ceci; lorsque vous compilez et construire un programme Fortran le compilateur ou éditeur de liens ne nécessite pas d'inclure les bibliothèques dans le processus. Il est chose interne du compilateur. Cela vaut pour les fonctions "standard" (intrinsics et autres).
Si vous utilisez la fonctionnalité des fonctions externes ou sous-routines (par exemple, certaines routines de traçage), alors vous devez les inclure séparément.
Mais si vous utilisez des fonctions mathématiques standard qui font partie de la langue, votre travail est terminé. Vous écrivez votre programme et compilez et de le construire. Pas besoin de savoir où ou comment ces fonctions sont mises en œuvre, où les mises en œuvre sont stockés et tels. C'est le travail du compilateur.
Enfin fixé la solution avec un mélange de conseils everyones.
Une fois que je me suis aperçu que j'utilisais SUN plutôt que GCC je suis passé à la compilation avec cc (gcc), CC (g ++) et F95 (F77).
Quel était résolu le problème dans le collage de toute la ligne de liaison de F77 commentaires verbeux (ci-dessus en poste principal) et la suppression progressive des parties qui ne contribuent pas. En fin de compte a été ajouté le texte suivant:
-t -R / opt / SUNWspro / lib / sparc: / opt / SUNWspro / lib -YP, / 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