gcc 64bit

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Grilla
Beiträge: 5
Registriert: 06.02.2009 20:27:52

gcc 64bit

Beitrag von Grilla » 06.02.2009 20:43:05

Hallo,
ich muss ein Fortran 77 Programm im 64bit Modus kompilieren. Dazu habe ich den pgf77 compiler installiert. Leider funktioniert der noch nicht ganz. Wenn ich versuche das Hello World Programm zu kompilieren erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

pc210:/home/astegmeir/ucn_d2/test# pgf77 hello.f
NOTE: your trial license will expire in 14 days, 3.45 hours.
/usr/local/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.3.2/libgcc.a when searching for -lgcc
/usr/local/bin/ld: cannot find -lgcc
Irgendwie liegt das Problem darin, dass der gcc compiler noch nicht im 64bit modus ist. Ich habe hier schon sämtlich libraries (lib64, multilibs..) installiert aber habe noch keine 64bit Version davon.

Code: Alles auswählen

pc210:/home/astegmeir/ucn_d2/test# gcc -v
Es werden eingebaute Spezifikationen verwendet.
Ziel: i486-linux-gnu
Konfiguriert mit: ../src/configure -v --with-pkgversion='Debian 4.3.2-1.1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-cld --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread-Modell: posix
gcc-Version 4.3.2 (Debian 4.3.2-1.1)
Ich verstehe die Meldung hier nicht so ganz. Aber so wie es scheint ist das noch kein 64bit compiler. Vielleicht muss ich auch nur irgendeine Option einstellen aber ich weiß nicht wie???

:hail: :hail: :hail: Ich weiß nicht ob ich hier in der ganz richtigen Rubrik im Forum bin aber vielleicht kann mir ja trotzdem jemand irgendwie weiterhelfen. Desweiteren bin ich ein totaler Linux Anfänger und bräuchte eine Erklärung für einen wirklich Dummen. :hail: :hail: :hail:

:!: Vielen Dank dass ihr euch meiner annehmt ich bin echt verzweifelt :!:

Grilla

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: gcc 64bit

Beitrag von Spasswolf » 06.02.2009 21:06:01

Willkommen im Forum!
Normalerweise sollte auch der 32bit gcc 64bit Code generieren können, mit "gcc -m64". Warum nimmst du nicht g77 oder den gfortran (eventuell mit der std=legacy Option) aus Debian, anstatt des pgf77 Compilers (da läuft auch keine Lizenz ab).

Grilla
Beiträge: 5
Registriert: 06.02.2009 20:27:52

Re: gcc 64bit

Beitrag von Grilla » 10.02.2009 14:28:01

Hallo,
entschuldigung, dass ich mich erst jetzt wieder melde, aber ich hatte noch prüfungen und hatte noch keine Zeit deinen Vorschlag auszuprobieren.
Mein Problem ist, dass ich ein Program habe, dass sehr kleine Zahlen verarbeiten muss (z.B. 1E-150). Ich habe bereits erfahren, dass dies mit dem pgf Compiler möglich ist. Ich habe jetzt mal das Programm mit dem gfortran Compiler mit -m64 flag ausprobiert. Beim kompilieren gibt mir dies die Fehlermeldung aus, dass "die Realkonstante seine Art unterschreitet"(tritt auf bei einer Zahl: 1.0e-100). Deswegen brauch ich wohl den pgf compiler

Ich denke, dass der pgf compiler irgendwie auf den gcc compiler zugreift aber diesen nur im 32 bit modus benutzt. Deswegen wäre meine Frage, ob man irgendwie einstellen kann, dass der gcc Compiler standardmäßig im 64bit modus läuft.

Ein "hello world" C Programm kann ich sowohl mit -m32 als auch -m64 Flag korrekt kompilieren und ausführen

Vielen Dank

Grilla

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: gcc 64bit

Beitrag von Spasswolf » 10.02.2009 14:52:15

1. Kannst du das Problem nicht reskalieren? :mrgreen:
2. Welchen Datentyp benutzt du für die 1.0e-100? Hast du etwas Beispielcode?
3. Du könntest eine 64bit Linuxdistribution installieren und probieren, ob der pgf compiler dort läuft.

Grilla
Beiträge: 5
Registriert: 06.02.2009 20:27:52

Re: gcc 64bit

Beitrag von Grilla » 10.02.2009 16:11:57

Hallo
1. reskalieren kann ich das Problem wohl nicht, da hierfür der Quellcode etwas kompliziert ist. :cry:
2. Diese kleinen Zahlen werden aus einer externen Textdatei eingelesen. In Fortran benutzt er dafür die Format Anweisung also so etwas wie Format(E6), Exponentialzahl mit 6 gültigen Ziffern.
3. ??? Habe ich das nicht schon ???

Code: Alles auswählen

astegmeir@pc210:~/ucn_d2/module$ uname -m
x86_64
astegmeir@pc210:~/ucn_d2/module$ uname -r
2.6.26-1-amd64
astegmeir@pc210:~/ucn_d2/module$ uname -a
Linux pc210 2.6.26-1-amd64 #1 SMP Sat Jan 10 19:55:48 UTC 2009 x86_64 GNU/Linux
astegmeir@pc210:~/ucn_d2/module$  
Vielen Dank

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: gcc 64bit

Beitrag von Spasswolf » 10.02.2009 17:04:33

Grilla hat geschrieben:Hallo
1. reskalieren kann ich das Problem wohl nicht, da hierfür der Quellcode etwas kompliziert ist. :cry:
2. Diese kleinen Zahlen werden aus einer externen Textdatei eingelesen. In Fortran benutzt er dafür die Format Anweisung also so etwas wie Format(E6), Exponentialzahl mit 6 gültigen Ziffern.
3. ??? Habe ich das nicht schon ???

Code: Alles auswählen

astegmeir@pc210:~/ucn_d2/module$ uname -m
x86_64
astegmeir@pc210:~/ucn_d2/module$ uname -r
2.6.26-1-amd64
astegmeir@pc210:~/ucn_d2/module$ uname -a
Linux pc210 2.6.26-1-amd64 #1 SMP Sat Jan 10 19:55:48 UTC 2009 x86_64 GNU/Linux
astegmeir@pc210:~/ucn_d2/module$  
Vielen Dank
Zu 3: Ich vermute du hast einen 32bit Distribution mit 64bit Kernel installiert. Endgültige Klarheit darüber könnte die Ausgabe von

Code: Alles auswählen

file /lib/libc.so.6
dpkg-architecture 
bringen.
Wenn es denn so sein sollte, kannst du da Paket Debianlib64gcc1 installieren, das enthält die 64bit Version der libgcc.

Zu 2: Ich meinte es eigentlich so:

Code: Alles auswählen

real a = 1.00e-100
real *8 b = 1.00e-100
real *16 c = 1.00e-100
double precision d = 1.00e-100
Laut dieser Quelle [1] reicht die normale double precision zumindest von der Grössenordnung locker aus.

Zu 1: Was ist denn eigentlich das Problem?


[1]http://earth.uni-muenster.de/~joergs/do ... tn623.html

Grilla
Beiträge: 5
Registriert: 06.02.2009 20:27:52

Re: gcc 64bit

Beitrag von Grilla » 11.02.2009 14:14:50

Hallo

zu 3)
Die Ausgabe ist:

Code: Alles auswählen

pc210:/home/astegmeir/ucn_d2/test# file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.7.so'
pc210:/home/astegmeir/ucn_d2/test# dpkg-architecture
DEB_BUILD_ARCH=i386
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=i386
DEB_BUILD_GNU_CPU=i486
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=i486-linux-gnu
DEB_HOST_ARCH=i386
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=i386
DEB_HOST_GNU_CPU=i486
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=i486-linux-gnu
lib64gcc1 ist laut aptitude installiert. Stört das wenn die normale libgcc1 instaqlliert ist?

zu 2) Die VAriablen die eingelesen werden, werden mit DIMENSION (z.B.:"DIMENSION EG(neg+1),DUMMY(ndm),TALNR(ntal)") deklariert. Dies ist glaube ich so eine Art Array. Eine weitere Deklaration erfolgt im Programm nicht. Der Datentyp wird dann wie erwähnt mittels des "Format"-statement deklariert. So etwas wie double precision, oder real kommt nicht vor. Des ist halt des Fortran77.

zu3) Ich weiß es ist ein saublödes Problem und danke dass du mir hilfst. Also Sachverhalt ist folgender. Ich habe von einem Kollegen ein Programm bekommen, das eine physikalische Simulation auswertet. Der Kollege meint, dass dieses Programm korrekt mit dem pgf Compiler funktioniert.
Jetzt ist es so, dass hier sehr kleine Zahlen eingelesen werden, die laut Aussage des Kollegen gleich null gesetzt werden, was ich bestätigen kann, falls das Programm im 32bit Modus kompiliert wird. Durch diese kleinen Zahlen wird dann irgendwo geteilt und ich kriege keinen sinnvollen Output.
Da es ja mit dem pgf compiler bei ihm funktioniert, denke ich es ist das beste, wenn ich auch mit diesem Compiler arbeite. Ich würde ja den Kollegen fragen, aber der ist leider nicht erreichbar.
Und da ich mich mit Linux nicht wirklich bis eher überhaupt nicht auskenne, und mir auch sonst kein Kollege weiterhelfen kann wende ich mich an euch.

Danke Grilla

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: gcc 64bit

Beitrag von Spasswolf » 11.02.2009 16:54:53

Eine weitere Deklaration erfolgt im Programm nicht. Der Datentyp wird dann wie erwähnt mittels des "Format"-statement deklariert. So etwas wie double precision, oder real kommt nicht vor. Des ist halt des Fortran77.
Soweit ich Fortran kenne ist das nicht möglich. Was aber möglich ist, dass am Anfang des Programms irgendwo "implicit real" (oder "implicit real (a-d)") steht, was alle Variablen (oder alle die mit a-d anfangen) als real deklariert. Das könntest du dann in "implicit double precision" (oder eventuell "implicit real*16") ändern und es nochmal mit g77/gfortran probieren.

Zum Problem des Kompilierens mit pgf kannst du es so probieren (ich bin mir allerdings allerdings nicht sicher ob der pgf die -L Option frisst):

Code: Alles auswählen

pgf77 -L/lib64 hello.f

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: gcc 64bit

Beitrag von Danielx » 11.02.2009 18:58:25

Grilla hat geschrieben:zu 3)
Die Ausgabe ist:
Also ein 32-Bit Debian mit 64-Bit Kernel.

Gruß,
Daniel

Grilla
Beiträge: 5
Registriert: 06.02.2009 20:27:52

Re: gcc 64bit

Beitrag von Grilla » 12.02.2009 12:15:19

Hallo, :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:
ich glaube das war es, ich habe die 64bit Distribution draufgetan und jetzt kompiliert er zumindest das hello world program richtig.

Vielen Dank :hail: :hail: :hail:

Grilla

Antworten