• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Suse 10.1 und fortran 77 / c

Hallo !

Ich habe folgendes Problem :

Ich habe Suse 10.1 und die zugehoerigen gcc und g77 bzw. gfortran pakete
installiert. Beim compilieren von .F files gibt es dann folgende Fehlermeldung :

f77: installation problem, cannot exec `cc1': Datei oder Verzeichnis nicht gefunden

natuerlich liegend die entsprechenden cc files irgendwo, aber es scheint da ein Problem mit dem g77 / compat g77 - gcc interface zu geben. Ich habe auch schon einen anderen Thread zu diesem Thema gefunden :

http://www.tutorialsall.com/SUSE/More-problems-275518/

Das Problem scheint auch bei Suse 10.0 schon vorhanden gewesen zu sein.
Gibt es mittlerweile eine Loesung fuer dieses Problem, oder muss ich wirklich die
gcc und g77 pakete von Hand nachinstallieren ?

Vielen Dank schon mal fuer die Hilfe und alles Gute

alex

(PS: Sorry falls dies eine alte Frage ist, bitte verweist mich einfach auf die alte Antwort und schreibt "Du Idiot !" drunter ;-) )
 
Hallo !

Ja, compat-g77 ist installiert, ich hatte zwischendurch mal alle fortran pakete deinstalliert, es zuerst nur mit "gfortran" und nur mit "g77" probiert, weil ich zuerst vermutet hab' dass vielleicht irgendwelche libriaries der unterschiedlichen Fortran versionen kollidieren, aber egal wie ich es mache, der Fehler bleibt der selbe.

Gruss,

alex
 
Von dem Problem dürfte aber eigentlich nur g77 betroffen sein, gfortran nicht. Stimmt das?

Scheint ein bekanntes Problem zu sein:

https://bugzilla.novell.com/show_bug.cgi?id=127745 (fälschlicherweise vom Reporter als FIXED markiert)
https://bugzilla.novell.com/show_bug.cgi?id=192186

Funktioniert es denn, wenn Du die Dateien von *.F (groß) nach *.f (klein) umbenennst?

Das Problem kommt daher, dass der GCC eine Version 4.x ist. Ab GCC 4.0 gibt es g77 eigentlich gar nicht mehr:

http://gcc.gnu.org/wiki/GFortranG77

Deswegen ist das Paket "compat-g77" aus einem alten GCC-Release gebaut. Dieses alte GCC-Release erwartet den C-Prozessor (cc1) in einem anderen Verzeichnis als dem, wohin der neue GCC es installiert.

Workarounds:

- Einen kompletten alten GCC selbst bauen, oder

- Herausfinden, wo genau der g77 nach cc1 sucht, und einen entsprechenden Symlink setzen, oder

- Dateien von *.F nach *.f umbenennen, dann wird der C-Präprozessor gar nicht erst gesucht.
 
Hallo traffic, danke erst mal fuer die Info !

mit den .f Dateinen scheint es zu funktionieren, aber da ich ein grosses Programm habe
(ca. 1000 Subroutinen mit allem Pipapo ) wuerde ich nicht so gerne alle Dateinamen aendern.

- Einen kompletten alten GCC selbst bauen, oder

koennte ich machen, ist natuerlich etwas Aufwand.

- Herausfinden, wo genau der g77 nach cc1 sucht, und einen entsprechenden Symlink setzen, oder

waere mir am liebsten, aber leider habe ich keine richtige Ahnung, wie ich das herausfinden kann. Ich wuerde mich sehr ueber Hinweise freuen !

Gruss und nochmal vielen Dank,

alex
 
Probier es mal so:
Code:
mkdir -p /usr/lib/gcc/i586-suse-linux/3.3.5
ln -s /usr/lib/gcc/i586-suse-linux/4.1.0/cc1 /usr/lib/gcc/i586-suse-linux/3.3.5/cc1
 
Hi traffic !

Super ! Scheint zu klappen, allerdings war der cc1 wohl nicht so ganz darauf vorbereitet :
cc1: Fehler: zu viele Dateinamen angegeben. Für Hilfe »cc1 --help« eingeben.
Ich hatte sowas schon befuerchtet, bzw. in einem anderen bug report gelesen
(da hatte ich den g77 noch nicht installiert).
Mit gfortran und gcc bekomme ich diese Fehlermeldung nicht, dann werden aber alle linker-flags, die ich im configure meines Programms gesetzt habe nicht erkannt.
Ich bin leider schon lange mit meinem "Latein" am Ende, vielleich hat ja noch jemand einen Vorschlag ?

Gruss,

alex
 
Dann füg dem g77-Aufruf die Option hinzu, dass der C-Präprozessor gar nicht erst aufgerufen werden soll.

Vorher (ohne die Option):
Code:
g77 bla.F
Nachher (mit der Option):
Code:
g77 -x f77 bla.F
Wenn Du autoconf benutzt, sollte es möglich sein, über
Code:
export FFLAGS="-x f77"
./configure
die Option in jeden g77-Aufruf zu bekommen.

Alternativ (falls Du etwas mehr Zeit für eine langfristige Lösung investieren möchtest): Portiere das gesamte Projekt auf gfortran, d.h. schlag in der man-Page die Linker-Flags nach und übersetz sie in die Form, die gfortran erwartet und versteht.
 
Hallo

Sorry fuer das Missverstaendniss, in diesem Code wimmelt es von Befehlen, die ohne ein C-Interface nicht auskommen (ich nenne nur dynamische Speicherverwaltung unter f77 als Beispiel). Deshalb nutzt mir natuerlich weder ein umbenennen in .f, noch das ausschalten des preprocessors. Man fragt sich natuerlich, wieso dann nicht gleich alles in C machen ?
Leider hat sich noch niemand gefunden, der dieses 100.000 Zeilen Monstrum in effizientem C neuprogrammiert (NWChem - Quantenchemie-Code fuer massiv parallele Systeme).

Ich werde wohl doch in den saueren Apfel beissen muessen, und ein komplettes compiler Paket selbst bauen, ich hatte eigendlich gehofft, dass mir das mit Suse erspart bleibt ...

Danke auf jeden Fall !!!

alex
 
Ich werd mal dafür sorgen, dass das gefixt wird und wenigstens in 10.2 der alte cc1 wieder dabei ist. Für 10.1 kann man jetzt nicht mehr viel machen.

Das bringt Dir zwar jetzt nichts, aber es kann ja nicht sein, dass wegen eines einzelnen, vergessenen Binaries das ganze Paket "compat-g77" mehr oder weniger wertlos ist.

Ach so, lösch den Symlink am besten wieder, der funktioniert sowieso nicht und könnte evtl. Nebenwirkungen haben.

PS: Du kannst das auch einfacher machen, als den kompletten alten GCC "freihändig" zu bauen.

Nimm das Source-RPM von compat-g77, installier es, ändere in der .spec-Datei die Zeile
Code:
    # Beware: we package crt*, libgcc.a and specs into the g77 package !
    rm -rf cc1 collect2
in
Code:
    # Beware: we package cc1, crt*, libgcc.a and specs into the g77 package !
    rm -rf collect2
und bau das RPM neu.
 
Ich nochmal !

'bin heute endlich dazu gekommen, Deinem Rat zu folgen :
suse source-rpm von compat-g77 geholt, rpm-i, dann .spec datei modifiziert,
dann rpm -ba compat-g77.spec und anschliessend rpm -i mit dem neuen
rpm. War recht schmerzlos , nachdem ich alle benoetigten Pakete nachinstalliert hatte und funktioniert prima !
Ich wusste gar nicht, dass sich das compat-g77 die noetige cc1 selbst baut, dann aber wieder loescht (ist doch so, oder ?) - hab' auf jeden Fall viel gelernt und kann endlich weiter programmieren.

Also vielen Dank nochmal und alles Gute,

alex
 
alex, könntest Du bitte so nett sein, Dir einen Bugzilla-Account bei Novell zu besorgen und in diesem Report hier

https://bugzilla.novell.com/show_bug.cgi?id=127745

erklären, weshalb Du cc1 im compat-g77-Paket brauchst bzw. weshalb der Workaround "*.F nach *.f umbenennen" für Dich nicht funktioniert und das Paket im derzeitigen Zustand für Dich unbrauchbar ist.

Der Maintainer scheint da sehr spektisch zu sein, was sich schlagartig ändern kann, wenn jemand, der es wirklich benutzt (d.h. Du), ganz konkret erklärt, warum cc1 umbedingt benötigt wird.

Verwendest Du eigentlich #include- und #define-Anweisungen im Fortran-Code? Oder geht es nur darum, dass Du Fortran- und C-Code zusammenlinken musst?
 
Oben