2009-03-20 7 views
2

Bonjour à tous,standard F90 Bibliothèque pour Makefile

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 n'importe où.

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 

compilateur:

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 la course '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 la course « 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 

Répondre

2

Quelle version de GCC utilisez-vous? Le compilateur fortran dans GCC a complètement changé avec le temps (g77 vs gfortran) - donc la bonne réponse dépend beaucoup des versions exactes. Il 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 rappelle deux options étaient à l'époque:

  • lien Essayez d'utiliser G77 et comprennent la bibliothèque -lstdC++ (et peut-être -lm?)
  • lien Essayez d'utiliser g ++ et comprennent les bibliothèques de la -lm (et peut-être -lfrtbegin?)

Si vous utilisez plus récent gfortran alors -lgfortran devrait fonctionner si la liaison avec g ++ et -lstdC++ en cas de liaison avec gfortran. Vous voulez également vous assurer que les commandes g ++ et f77 de votre fichier make exécutent les commandes que vous attendez d'elles (par exemple, ne pas accéder aux exécutables dans des répertoires inattendus ou dans des versions différentes/incompatibles).

EDIT: De vos récentes modifications à votre question, vous semblez essayer de lier le f77 du compilateur SUN avec le GCC g ++. Je ne pense pas que ce soit possible. Essayez d'utiliser G77 ou gfortran de GCC au lieu de SUN f77.

+0

La version est GCC 3.4.3 (2004). J'ai essayé vos astuces sur l'ajout de -lm, -lg2c & -lfrtbegin, mais les deux dernières ne sont pas trouvées par le compilateur. Aussi vérifié, pas de compilateur gfortran non plus. Quant à l'exécution dans le bon fichier que c'est. – Raugnar

+0

Consultez mes modifications pour répondre - vous utilisez peut-être le compilateur SUN fortran et non le compilateur fortran GCC. Dans GCC 3.4.3, vous devriez avoir g77. (GCC> = 4 a nouveau gfortran). – luapyad

0

Fortran ne dispose pas de "bibliothèques standard". Il a beaucoup de fonctions intrinsèques, mais elles font partie du langage, défini par la norme.


réponses aux commentaires, puisque le champ de commentaire est un peu trop restrictive en ce qui concerne le nombre de caractères:

- Oui @ Michael, vous pouvez dire. Mais, encore, ce n'est pas la même chose qu'avec d'autres langues auxquelles vous êtes probablement habitué. Ce que je veux dire est ceci; Lorsque vous compilez et construisez un programme fortran, le compilateur ou l'éditeur de liens n'exige pas que vous incluiez des bibliothèques dans le processus. C'est la chose interne du compilateur. Cela vaut pour les fonctions "standard" (intrinsèques et autres).

Si vous utilisez des fonctions externes ou des sous-routines (par exemple, certaines routines de traçage), vous devez les inclure séparément. Mais si vous utilisez des fonctions mathématiques standard qui font partie de la langue, alors votre travail est terminé. Vous écrivez votre programme, et le compilez et le construisez. Pas besoin de savoir où et comment ces fonctions sont implémentées, où les implémentations sont stockées et autres. C'est le travail du compilateur.

+0

Mais quand la collection de compilateurs GNU est en train de construire un programme FORTRAN, il faut sûrement qu'elle soit reliée dans une sorte de bibliothèque de support? –

+0

Ajout du code exact. vous pouvez voir quels fichiers sont fortran dans le Makefile et comme les références non définies dans les commentaires du compilateur – Raugnar

+0

@Raugnar - Je dois admettre, puisque je n'utilise pas makefiles, la liste donnée est un peu confuse pour moi. Je vois beaucoup de fichiers .f, et certains fichiers .o (objet?), Mais je ne peux pas dire ce qui manque à cela. S'il vous plaît élaborer si vous le pouvez. – Rook

2

Raugnar,

Je vous renvoie à my answer à 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éler exactement qui soutiennent les bibliothèques sont liées par défaut.

+0

Fait et testé chacun d'entre eux, avec aucune liste qui fonctionne et résoudre le problème. La raison pour passer de la compilation via f77 à g ++ est que je peux obtenir les symboles pour le débogage afin de régler ma question précédente. – Raugnar

0

Enfin fixé la solution avec un mélange de tous les conseils. Une fois que j'ai réalisé que j'utilisais SUN plutôt que GCC, je suis passé à la compilation avec cc (gcc), CC (g ++) et f95 (f77). Ce qui a résolu le problème était de coller dans toute la ligne de l'éditeur de liens à partir de la rétroaction prolixe f77 (ci-dessus dans le message principal) et de supprimer progressivement les parties qui n'ont pas contribué. A la fin, le texte suivant a été ajouté:

-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

Questions connexes