Problem mit gfortran
Problem mit gfortran
Hallo,
vorweg vielen Dank für die Aufnahme ins Forum.
Ich hatte diese Frage schon im LinuxMintUsers Forum gestellt und dort wurde mir empfohlen die Frage hier noch mal zu stellen, da hier vielleicht noch Leute sind die sich besser mit Fortran auskennen. Nun zu meiner Frage/Problem.
Zu meinem Hintergrund, ich arbeite an einer Universität und wir brauchen für bestimmte FEM Berechnungen ein Programm das sich tochnog (das läuft sowohl unter Window als auch Linux) nennt und hier im besonderen zur Berechnung mit speziellen Stoffgesetzen eine Version die sich tochnog_user_supplied nennt und NUR unter Linux läuft.
Wir haben das ganze auch schon auf zwei älteren Workstations erfolgreich am laufen und wollten das ganze nun auf einer neuen Maschine zum laufen bringen. Leider bekommen wir beim Start der Berechnung im Terminal folgende Fehlermeldung:
tochnog_user_supplied: symbol lookup error: <Pfad>/umat.so: undefined symbol: _gfortran_matmul_r8
Auf dem neuen System ist genauso wie auf den alten Systemen GCC, G++, Gfortran (Versionen 9,11) installiert. Dieses wird alles zum compilieren der speziellen user.so und umat.so benötigt. Beim compilieren kamen anfangs nur warnings und keine Fehler. Ich hatte zwischenzeitlich auf dem neuen System alle Fortran, G++ und Gcc Versionen mittels der Anwendungsverwaltung deinstalliert und nach einem Neustart wieder installiert. Hierdurch lief dann auch das compilieren ohne jegliche Meldung durch.
Die Fehlermeldung beim Starten des Programms hat sich dann in diese verändert:
tochnog_user_supplied: symbol lookup error: <Pfad>/umat.so: undefined symbol: _gfortran_st_write
Die Pfade zu dem Programm und zu den Libs habe ich noch mal kontrolliert. Sie passen bei dem alten und neuen System überein. Auf dem neuen System ist der Pfad zu der User.so und umat.so in der LD_LIBRARY_PATH definiert. Bei den alten System wurden die Dateien mit root rechten in das lib Verzeichnis kopiert. Auch dieses habe ich im neuen System schon probiert aber es kommt der gleiche Fehler dabei raus.
Für Hilfe die das Problem löst wäre ich wirklich dankbar, da ich mit meinem (zugegebener Massen bescheidenen) Linux Kenntnissen am Ende bin. Lösungsvorschläge kann ich erst morgen prüfen, da ich erst dann wieder am Institut bin, daher bitte nicht wundern falls ich heute nicht mehr reagiere.
Grüße
grisu17
System alt und neu: Dual-Boot: Win10/11 und LinuxMint 21.3 - Cinnamon
Kernel 5.15.0-94-generic
Updates werden regelmäßig durchgeführt
System alt: 2 x Xeon E52620v3, 32 GB Ram
System neu: Ryzen9 7950X, 32 GB Ram
vorweg vielen Dank für die Aufnahme ins Forum.
Ich hatte diese Frage schon im LinuxMintUsers Forum gestellt und dort wurde mir empfohlen die Frage hier noch mal zu stellen, da hier vielleicht noch Leute sind die sich besser mit Fortran auskennen. Nun zu meiner Frage/Problem.
Zu meinem Hintergrund, ich arbeite an einer Universität und wir brauchen für bestimmte FEM Berechnungen ein Programm das sich tochnog (das läuft sowohl unter Window als auch Linux) nennt und hier im besonderen zur Berechnung mit speziellen Stoffgesetzen eine Version die sich tochnog_user_supplied nennt und NUR unter Linux läuft.
Wir haben das ganze auch schon auf zwei älteren Workstations erfolgreich am laufen und wollten das ganze nun auf einer neuen Maschine zum laufen bringen. Leider bekommen wir beim Start der Berechnung im Terminal folgende Fehlermeldung:
tochnog_user_supplied: symbol lookup error: <Pfad>/umat.so: undefined symbol: _gfortran_matmul_r8
Auf dem neuen System ist genauso wie auf den alten Systemen GCC, G++, Gfortran (Versionen 9,11) installiert. Dieses wird alles zum compilieren der speziellen user.so und umat.so benötigt. Beim compilieren kamen anfangs nur warnings und keine Fehler. Ich hatte zwischenzeitlich auf dem neuen System alle Fortran, G++ und Gcc Versionen mittels der Anwendungsverwaltung deinstalliert und nach einem Neustart wieder installiert. Hierdurch lief dann auch das compilieren ohne jegliche Meldung durch.
Die Fehlermeldung beim Starten des Programms hat sich dann in diese verändert:
tochnog_user_supplied: symbol lookup error: <Pfad>/umat.so: undefined symbol: _gfortran_st_write
Die Pfade zu dem Programm und zu den Libs habe ich noch mal kontrolliert. Sie passen bei dem alten und neuen System überein. Auf dem neuen System ist der Pfad zu der User.so und umat.so in der LD_LIBRARY_PATH definiert. Bei den alten System wurden die Dateien mit root rechten in das lib Verzeichnis kopiert. Auch dieses habe ich im neuen System schon probiert aber es kommt der gleiche Fehler dabei raus.
Für Hilfe die das Problem löst wäre ich wirklich dankbar, da ich mit meinem (zugegebener Massen bescheidenen) Linux Kenntnissen am Ende bin. Lösungsvorschläge kann ich erst morgen prüfen, da ich erst dann wieder am Institut bin, daher bitte nicht wundern falls ich heute nicht mehr reagiere.
Grüße
grisu17
System alt und neu: Dual-Boot: Win10/11 und LinuxMint 21.3 - Cinnamon
Kernel 5.15.0-94-generic
Updates werden regelmäßig durchgeführt
System alt: 2 x Xeon E52620v3, 32 GB Ram
System neu: Ryzen9 7950X, 32 GB Ram
- schorsch_76
- Beiträge: 2556
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Problem mit gfortran
Wenn ich nach diesem Symbol suche lande ich hier [1]. Auch [2] zeigt in die Richtung das Importe bei dir fehlen könnten.
Ist es möglich dieses Programm neu zu übersetzen oder ist der Quellcode nicht verfügbar?
[1] https://gcc.gnu.org/onlinedocs/gfortran/MATMUL.html
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37953
Ist es möglich dieses Programm neu zu übersetzen oder ist der Quellcode nicht verfügbar?
[1] https://gcc.gnu.org/onlinedocs/gfortran/MATMUL.html
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37953
Re: Problem mit gfortran
Ich denke das der MATMUL "Befehl" richtig eingesetzt wurde. Aber der zweite Punkt erscheint mir im Moment der vielversprechenste zu sein, da ja immer irgendwelche links zu fehlen scheinen.
Der Quellcode der zu kompilierenden Dateien liegt mir vor. Leider hilft mir das nichts da ich nicht so tief im Programmieren drin bin.
In der makefile sieht die Zeile mit Fortran wie folgt aus:
gfortran -finit-local-zero -fPIC -c umat.f
Könnte hier irgendwas vergessen worden sein? In der Datei umat.f wird per "include" auf drei vorhandene andere Dateien (.f) verwiesen, in denen nach meiner Einschätzung die mathematischen Vorgänge für das Stoffgesetz niedergelegt sind.
Der Quellcode der zu kompilierenden Dateien liegt mir vor. Leider hilft mir das nichts da ich nicht so tief im Programmieren drin bin.
In der makefile sieht die Zeile mit Fortran wie folgt aus:
gfortran -finit-local-zero -fPIC -c umat.f
Könnte hier irgendwas vergessen worden sein? In der Datei umat.f wird per "include" auf drei vorhandene andere Dateien (.f) verwiesen, in denen nach meiner Einschätzung die mathematischen Vorgänge für das Stoffgesetz niedergelegt sind.
Re: Problem mit gfortran
Stell mal das ganze Makefile hier ein:
pastebin/
Vermutlich muß man den Linkbefehl im Makefile umbauen. Hört sich schlimmer an als es ist
pastebin/
Vermutlich muß man den Linkbefehl im Makefile umbauen. Hört sich schlimmer an als es ist
Re: Problem mit gfortran
Perfekt.
Die ist ja deutlich kleiner als ich befürchtet hatte.
Ich würde es damit versuchen, die gcc durch gfortran zu ersetzen:
Aus
Code: Alles auswählen
gcc -shared -Wl,-soname,umat.so -o umat.so umat.o
Code: Alles auswählen
gfortran -shared -Wl,-soname,umat.so -o umat.so umat.o
Re: Problem mit gfortran
Wow, krass
Anscheinend ist es das gewesen. Zumindest rechnet der Rechner jetzt seit ca. 45 Minuten an dem Testmodel ohne Fehlermeldung, die normalerweise schon in den ersten Sekunden erscheint.
Kannst Du einem Laien kurz erklären woran das jetzt genau lag? Sind Gcc und Gfortran Programme die Code erzeugen und dadurch das Gcc "Übersetzungsfehler" macht findet der endgütige Code nicht die entsprechenden "symbols"?
Auf jeden Fall schon mal einen riesen Dank
Anscheinend ist es das gewesen. Zumindest rechnet der Rechner jetzt seit ca. 45 Minuten an dem Testmodel ohne Fehlermeldung, die normalerweise schon in den ersten Sekunden erscheint.
Kannst Du einem Laien kurz erklären woran das jetzt genau lag? Sind Gcc und Gfortran Programme die Code erzeugen und dadurch das Gcc "Übersetzungsfehler" macht findet der endgütige Code nicht die entsprechenden "symbols"?
Auf jeden Fall schon mal einen riesen Dank
Re: Problem mit gfortran
Ich möchte diesen Thread nicht kapern, aber er hat mich auf Fortran neugierig gemacht. Ergebnis:
- schnell erlernbar
- überschaubare Variablentypen
- sehr schnelle Übersetzung mit Gfortran
Kein Wunder, das diese Hochsprache an Universitäten noch einen hohen Rang besitzt. Hab eine gute deutsche Dokumentation von der Universität Bayreuth und Universität München "Programmieren in Fortran 90/95" gefunden.
Gefällt mir sehr.
Gruß ralli
- schnell erlernbar
- überschaubare Variablentypen
- sehr schnelle Übersetzung mit Gfortran
Kein Wunder, das diese Hochsprache an Universitäten noch einen hohen Rang besitzt. Hab eine gute deutsche Dokumentation von der Universität Bayreuth und Universität München "Programmieren in Fortran 90/95" gefunden.
Gefällt mir sehr.
Gruß ralli
Zuletzt geändert von ralli am 26.02.2024 17:57:34, insgesamt 1-mal geändert.
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.
Re: Problem mit gfortran
Gcc und gfortran sind einerseits Compiler, die aus Quelltext Maschinencode erzeugen. Aus einer .f-Datei wird dann eine .o-Datei.grisu17 hat geschrieben:26.02.2024 17:30:12Sind Gcc und Gfortran Programme die Code erzeugen und dadurch das Gcc "Übersetzungsfehler" macht findet der endgütige Code nicht die entsprechenden "symbols"?
Andererseits sind gcc und gfortran auch Linker, die aus den erzeugten .o-Dateien entweder das Endprodukt Executable oder, wie in deinem Fall, ein shared Object (.so-Datien) erzeugen. Executables sind vergleichbar mit .exe-Dateien unter Windows, shared Objects sind vergleichbar mit .dll-Dateien unter Windows. Beim Erzeugen dieser Endprodukte kann es nötig sein, je nach Programmiersprache unterschiedliche Initialisierungsdateien und Bilbiothemen dazu zu linken. gcc link z.B. Startcode für in C geschriebene Programme dazu, g++ nimmt Startcode für in C++ geschrieben Programme und gfortran macht das gleiche für Fortranprogramme.
Theoretisch könnte man die Programme auch ganz low-level mit ld linken, müßte dann aber wissen, welcher Starcode gebraucht wird. Letzten Endes führen gcc, g++ und gfortran unten drunter ld aus und geben ihm den passenden Startcode mit.
Ein deinem Fall wurde mit gcc versucht, Starcode und Bibliotheken für in C geschrieben Programme zu Fortrancode zu linken, und dabei fehlte dann aben etwas, was gfortran "besser wußte".
Re: Problem mit gfortran
Vielen Dank nochmals. Das Problem ist tatsächlich vollständig gelöst.
Auch und besonders für die zusätzliche erhellende Erläuterung
Auch und besonders für die zusätzliche erhellende Erläuterung