Question

Je travaille avec un code hérité + académique + numérique FORTRAN-77 qui nécessite G77 3.2.x afin de compiler et d'exécuter avec succès ... J'utilise ce compilateur sur Red Hat Linux 9 pour i386

L'un de ces fichiers FORTRAN-77 définit un sous-programme avec beaucoup de tableaux réels, entiers et à double précision comme variables locales ... si je le compile en utilisant:

$ g77 -c thefile.F -o thefile.o

Il produit un fichier d'objet de taille autour de 10 Ko ... mais les suivants:

$ g77 -finit-local-zero -c thefile.F -o thefile.o

produit un fichier d'objet de taille 14 Mo

j'ai essayé strip'ing le fichier d'objet mais la taille ne change pas beaucoup

Quelques douzaines de tels fichiers dans le code et le binaire exécutable finit par être de 200 Mo

Une idée de ce qui se passe? plus important Que puis-je faire pour revenir aux tailles d'objet / binaire sain?

PS: Quand j'ai comprimé le binaire de 200 Mo dans Tar.gz, le tarball était inférieur à 1 Mo ... signifie probablement que le 200 Mo est plein de 0 ou quelque chose (je pourrais l'ouvrir dans un éditeur hexagonal mais je me sens trop paresseux à présent)

PS: Les détails du compilateur sont donnés ci-dessous (en utilisant le drapeau -v de G77)

$ g77 -v -finit-local-zero -c thefile.F -o thefile.o
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/tradcpp0 -lang-fortran -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ thefile.F /tmp/ccXXvzMA.f
GNU traditional CPP version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/f771 /tmp/ccXXvzMA.f -quiet -dumpbase thefile.F -version -finit-local-zero -o /tmp/cck0Blw1.s
GNU F77 version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) (i386-redhat-linux)
    compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5).
 as -V -Qy -o thefile.o /tmp/cck0Blw1.s
GNU assembler version 2.13.90.0.18 (i386-redhat-linux) using BFD version 2.13.90.0.18 20030206

Edit: les versions G77 / GFertran plus récentes n'ont pas ce problème (la taille du fichier d'objet reste presque la même Projet en soi) ... et j'ai besoin de l'indicateur -finit-local-zéro (le code est suspendu sans lui)

Edit 2: J'ai pris un vidage hexagonal et bien sûr 99% du fichier se compose de zéros!

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top