Hallo gpc Cracks
Ich sollte ein Delphi Programm in eine Solarisumgebung portieren. Das ist mit gpc grundsätzlich kein Problem, aber:
Wie linke ich ein mit gpc kompiliertes Object File (z.B. myGPCunit.o) mit einem (uff, jetzt kommt's) native SUN WorkShop 4.2 F77 Compiler von 1995 (ist leider die Problematik)???
Geht das überhaupt?
Leider kennt der pc vom SUN WorkShop das UNIT Konzept noch nicht und es würde viel Fleissarbeit auf mich zukommen, wenn ich den Delphi Code nach Standard Pascal umsetzen müsste, also wieder mit (den guten alten??) Include Files etc. arbeiten :(
Hat das schon mal jemand gemacht? Bin für alle Tipps und Tricks dankbar!
Besten Dank & Gruss, Roland
PS: Bitte Antwort auch an roland@styx.li schicken, besten Dank!
-- Roland Rick, Unix Systeme, Tel +423/235 13 03, Fax +423/375 49 54
LGT Financial Services Limited Herrengasse 12, P.O. Box 85, FL-9490 VADUZ Principality of Liechtenstein Tel. +423 235 24 44, Fax +423 235 24 40 Mail: lgt.fs@lgt.com Web: http://www.lgt.com ---------------------------------------------------------------------- Privileged/Confidential Information may be contained in this message. If you are not the addressee indicated in this message (or responsible for delivery of the message to such person), you may not copy or deliver this message to anyone. In such case, you should destroy this message and kindly notify the sender by reply email. Please advise immediately if you or your employer does not consent to Internet email for messages of this kind. Opinions, conclusions and other information in this message that do not relate to the official business of my firm shall be understood as neither given nor endorsed by it. -----------------------------------------------------------------------
Rick Roland schrieb:
Ich sollte ein Delphi Programm in eine Solarisumgebung portieren. Das ist mit gpc grundsätzlich kein Problem, aber:
Wie linke ich ein mit gpc kompiliertes Object File (z.B. myGPCunit.o) mit einem (uff, jetzt kommt's) native SUN WorkShop 4.2 F77 Compiler von 1995 (ist leider die Problematik)???
Geht das überhaupt?
Ich kenne weder Fortran, noch den Sun-Compiler näher, aber i.a. dürfte sich das Objekt-Format auf Solaris in den letzten paar (?;-) Jahren nicht sehr geändert haben.
Von GPC-Seite dürfte das Selbe gelten wie für Linken mit C-Code (s. demos/gpc_c*). Wenn zum Linken nicht GPC aufgerufen wird, `-lgpc -lm' angeben sowie einen Pfad, der zu libgpc.a führt, mittels `-L'.
Wenn es dann spezielle Probleme gibt, kann man weitersehen.
Frank
Hallo Frank
Besten Dank für Deine Info.
Komme gerne auf Dein Abgebot zurück, mich bei Problemen zu melden ;)
Installierter gcc: 3.2 (statt 2.95.???)
Kleines Problem: - MUSS mit SUN's f77 kompilierbar sein. - dieses kennt kein -lgpc -lm, dort muss es -lpfc -lpc heissen.
mod01.pas wurde wie folgt kompiliert: $ gpc -g -c mod01.pas
Tja, leider folgende Linkermeldungen: $ f77 mod01.o -g fmain.f -lpfc -lpc -L /usr/local/lib/gcc-lib/sparc-sun-solaris 2.8/2.95.2/libgpc.a fmain.f: MAIN fmain: Undefined first referenced symbol in file _p_atexit mod01.o ld: fatal: Symbol referencing errors. No output written to a.out
Gleicher Versuch mit g77 (GNU F77 compiler): $ g77 mod01.o -g fmain.f -lgpc -lm -L /usr/local/lib/gcc-lib/sparc-sun-solaris2 .8/2.95.2/libgpc.a ld: fatal: library -lgpc: not found ld: fatal: File processing errors. No output written to a.out collect2: ld returned 1 exit status
Hmmmmm: Wieso findet er -lgpc nicht? $ echo $LD_LIBRARY_PATH /usr/lib:/usr/local/lib ==> Müsste doch eigentlich gehen, oder?
Mit SUN's pc und f77: $ pc -g -c mod02.p
$ f77 mod02.o -g fmain.f -lpfc -lpc fmain.f: MAIN fmain:
$ ./a.out d1 = 4.246000000000000440536496171262 d2 = 4.246000000000000440536496171262 d3 = 4.246000000000000440536496171262
Das Dumme an `pc' ist nur, dass ich aus dem zu compilierendem Delphi Source alle `Advantages' von Borland/Delphi PASCAL entfernen muss, was mich ziemlich ansch**ss*.
Arghhh: So wird aus z.B. aus var s: string[80]; folgendes var s: varying[80] of char; und alle Vorteile die das UNIT Konzept bringt gehen dummerweise auch flöten.
Super, oder?
Die Delphi Source lässt sich ohne grössere Modifikationen per `gpc' kompilieren. Jetzt gilt's nur noch das Problem zu lösen, wie ich das mit f77 kompilieren/linken kann (wenn das überhaupt geht).
Wichtig: Zielkunde kann und will kein `gpc' etc. verwenden :(
Alle bbenötigten Files als Attachment dabei.
Gruss, Roland
-----Ursprüngliche Nachricht----- Von: Frank Heckenbach [mailto:frank@g-n-u.de] Gesendet: Dienstag, 14. Januar 2003 23:42 An: gpc-de@gnu.de; roland@styx.li Betreff: Re: gpc Kompilat mit native F77 von SUNverwenden
Rick Roland schrieb:
Ich sollte ein Delphi Programm in eine Solarisumgebung
portieren. Das ist
mit gpc grundsätzlich kein Problem, aber:
Wie linke ich ein mit gpc kompiliertes Object File (z.B.
myGPCunit.o) mit
einem (uff, jetzt kommt's) native SUN WorkShop 4.2 F77
Compiler von 1995
(ist leider die Problematik)???
Geht das überhaupt?
Ich kenne weder Fortran, noch den Sun-Compiler näher, aber i.a. dürfte sich das Objekt-Format auf Solaris in den letzten paar (?;-) Jahren nicht sehr geändert haben.
Von GPC-Seite dürfte das Selbe gelten wie für Linken mit C-Code (s. demos/gpc_c*). Wenn zum Linken nicht GPC aufgerufen wird, `-lgpc -lm' angeben sowie einen Pfad, der zu libgpc.a führt, mittels `-L'.
Wenn es dann spezielle Probleme gibt, kann man weitersehen.
Frank
-- Frank Heckenbach, frank@g-n-u.de, http://fjf.gnu.de/, 7977168E GPC To-Do list, latest features, fixed bugs: http://www.gnu-pascal.de/todo.html GPC download signing key: 51FF C1F0 1A77 C6C2 4482 4DDC 117A 9773 7F88 1707
Roland Rick schrieb:
Komme gerne auf Dein Abgebot zurück, mich bei Problemen zu melden ;)
Installierter gcc: 3.2 (statt 2.95.???)
Kleines Problem:
- MUSS mit SUN's f77 kompilierbar sein.
- dieses kennt kein -lgpc -lm, dort muss es -lpfc -lpc heissen.
mod01.pas wurde wie folgt kompiliert: $ gpc -g -c mod01.pas
Tja, leider folgende Linkermeldungen: $ f77 mod01.o -g fmain.f -lpfc -lpc -L /usr/local/lib/gcc-lib/sparc-sun-solaris 2.8/2.95.2/libgpc.a fmain.f: MAIN fmain: Undefined first referenced symbol in file _p_atexit mod01.o ld: fatal: Symbol referencing errors. No output written to a.out
Gleicher Versuch mit g77 (GNU F77 compiler): $ g77 mod01.o -g fmain.f -lgpc -lm -L /usr/local/lib/gcc-lib/sparc-sun-solaris2 .8/2.95.2/libgpc.a ld: fatal: library -lgpc: not found ld: fatal: File processing errors. No output written to a.out collect2: ld returned 1 exit status
Hmmmmm: Wieso findet er -lgpc nicht? $ echo $LD_LIBRARY_PATH /usr/lib:/usr/local/lib ==> Müsste doch eigentlich gehen, oder?
Also, offenbar liegt da eine kleine Verwechslung vor. libgpc (beim Linker als -lgpc angegeben) ist die Laufzeit-Bibliothek von GPC. Diese wird benötigt, um irgendwas zu linken, was mit GPC compiliert wurde. (Außerdem benötigt es die Mathe-Bibliothek, -lm, die aber vorhanden sein dürfte.) Also muss auf dem System GPC installiert werden (oder zumindest libgpc.a von einem anderen System kopiert werden).
-lpfc -lpc sind anscheinend die Laufzeit-Bibliotheken von Suns Compiler -- ich weiß jetzt nicht genau, ob sie zu pc oder Fortran gehören. Ersteres kann man vergessen, da ja pc nicht benutzt werden soll. Wenn Letzteres, einfach zusätzlich mitlinken (obwohl ich erwartet hätte, dass f77 das automatisch macht, wenn man damit linkt).
Das Dumme an `pc' ist nur, dass ich aus dem zu compilierendem Delphi Source alle `Advantages' von Borland/Delphi PASCAL entfernen muss, was mich ziemlich ansch**ss*.
Arghhh: So wird aus z.B. aus var s: string[80]; folgendes var s: varying[80] of char; und alle Vorteile die das UNIT Konzept bringt gehen dummerweise auch flöten.
Super, oder?
Die Delphi Source lässt sich ohne grössere Modifikationen per `gpc' kompilieren. Jetzt gilt's nur noch das Problem zu lösen, wie ich das mit f77 kompilieren/linken kann (wenn das überhaupt geht).
Compilieren sicher nicht (das ist ja ein Fortran-Compiler). Eine mit GPC compilierte Datei linken sollte gehen. (Es können allerdings kleine Konflikte auftreten, die man dann beheben müsste. Ich weiß nicht, ob das schon mal jemand probiert hat ...)
Wichtig: Zielkunde kann und will kein `gpc' etc. verwenden :(
Sofern du die Sachen compilierst und er sie nicht ändern will/muss, und du ihm wie gesagt libgpc.a gibst (bitte §3 der GPL beachten), müsste es gehen -- außerdem evtl. libgcc.a, wenn die GPC-Backend-Version eine andere ist als die installierte GCC-Version.
Frank
Ups, da hab ich mich wohl zu undeutlich ausgedrückt.
Ziel ist mit gpc generierten Objectcode (*.o) mit SUN's f77 (muss Bedingung) zu linken. Das Hauptprogramm ist in FORTRAN geschrieben; es sollen vorhandene PASCAL Module ohne grösseren Aufwand in ein FORTRAN Programm übernommen werden können (Heimarbeit).
Gruss, Roland
-----Ursprüngliche Nachricht----- Von: gpc-de-owner@gnu.de [mailto:gpc-de-owner@gnu.de] Im Auftrag von Frank Heckenbach Gesendet: Dienstag, 4. Februar 2003 01:39 An: gpc-de@gnu.de Betreff: Re: gpc Kompilat mit native F77 von SUN
Roland Rick schrieb:
Komme gerne auf Dein Abgebot zurück, mich bei Problemen zu melden ;)
Installierter gcc: 3.2 (statt 2.95.???)
Kleines Problem:
- MUSS mit SUN's f77 kompilierbar sein.
- dieses kennt kein -lgpc -lm, dort muss es -lpfc -lpc heissen.
mod01.pas wurde wie folgt kompiliert: $ gpc -g -c mod01.pas
Tja, leider folgende Linkermeldungen: $ f77 mod01.o -g fmain.f -lpfc -lpc -L /usr/local/lib/gcc-lib/sparc-sun-solaris 2.8/2.95.2/libgpc.a fmain.f: MAIN fmain: Undefined first referenced symbol in file _p_atexit mod01.o ld: fatal: Symbol referencing errors. No output written to a.out
Gleicher Versuch mit g77 (GNU F77 compiler): $ g77 mod01.o -g fmain.f -lgpc -lm -L /usr/local/lib/gcc-lib/sparc-sun-solaris2 .8/2.95.2/libgpc.a ld: fatal: library -lgpc: not found ld: fatal: File processing errors. No output written to a.out collect2: ld returned 1 exit status
Hmmmmm: Wieso findet er -lgpc nicht? $ echo $LD_LIBRARY_PATH /usr/lib:/usr/local/lib ==> Müsste doch eigentlich gehen, oder?
Also, offenbar liegt da eine kleine Verwechslung vor. libgpc (beim Linker als -lgpc angegeben) ist die Laufzeit-Bibliothek von GPC. Diese wird benötigt, um irgendwas zu linken, was mit GPC compiliert wurde. (Außerdem benötigt es die Mathe-Bibliothek, -lm, die aber vorhanden sein dürfte.) Also muss auf dem System GPC installiert werden (oder zumindest libgpc.a von einem anderen System kopiert werden).
-lpfc -lpc sind anscheinend die Laufzeit-Bibliotheken von Suns Compiler -- ich weiß jetzt nicht genau, ob sie zu pc oder Fortran gehören. Ersteres kann man vergessen, da ja pc nicht benutzt werden soll. Wenn Letzteres, einfach zusätzlich mitlinken (obwohl ich erwartet hätte, dass f77 das automatisch macht, wenn man damit linkt).
Das Dumme an `pc' ist nur, dass ich aus dem zu
compilierendem Delphi Source
alle `Advantages' von Borland/Delphi PASCAL entfernen muss, was mich ziemlich ansch**ss*.
Arghhh: So wird aus z.B. aus var s: string[80]; folgendes var s: varying[80] of char; und alle Vorteile die das UNIT Konzept bringt gehen
dummerweise auch flöten.
Super, oder?
Die Delphi Source lässt sich ohne grössere Modifikationen per `gpc' kompilieren. Jetzt gilt's nur noch das Problem zu lösen,
wie ich das mit f77
kompilieren/linken kann (wenn das überhaupt geht).
Compilieren sicher nicht (das ist ja ein Fortran-Compiler). Eine mit GPC compilierte Datei linken sollte gehen. (Es können allerdings kleine Konflikte auftreten, die man dann beheben müsste. Ich weiß nicht, ob das schon mal jemand probiert hat ...)
Wichtig: Zielkunde kann und will kein `gpc' etc. verwenden :(
Sofern du die Sachen compilierst und er sie nicht ändern will/muss, und du ihm wie gesagt libgpc.a gibst (bitte §3 der GPL beachten), müsste es gehen -- außerdem evtl. libgcc.a, wenn die GPC-Backend-Version eine andere ist als die installierte GCC-Version.
Frank
-- Frank Heckenbach, frank@g-n-u.de, http://fjf.gnu.de/, 7977168E GPC To-Do list, latest features, fixed bugs: http://www.gnu-pascal.de/todo.html GPC download signing key: 51FF C1F0 1A77 C6C2 4482 4DDC 117A 9773 7F88 1707
Roland Rick schrieb:
Ups, da hab ich mich wohl zu undeutlich ausgedrückt.
Ziel ist mit gpc generierten Objectcode (*.o) mit SUN's f77 (muss Bedingung) zu linken. Das Hauptprogramm ist in FORTRAN geschrieben; es sollen vorhandene PASCAL Module ohne grösseren Aufwand in ein FORTRAN Programm übernommen werden können (Heimarbeit).
Darauf bezieht sich doch meine Antwort.
Frank
Hallo Frank/gpc-de@gnu.de
Also: Dass es mit g77 nicht klappte war, weil ich die Datei statt den Pfad zu libgpc.a angegeben hatte (bin halt leider nur Umgebungen wie Delhi etc. gewohnt und bewege mich unter Solaris/Linux auf neuem Terrain). Mit dem GNU g77 Compiler klappt das linken jetzt:
$ g77 fmain.f mod01.o -g -L /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3 -lgpc -lm
wird fehlerfrei ausgeführt.
Leider komm ich beim Verwenden von SUN's f77 als Compiler/Linker nicht ein bisschen weiter.
Gebe ich alle "muss" Libraries an, meldet der Linker:
$ f77 fmain.f mod01.o -g -L /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3 -lgpc -lm -lpfc -lpc
fmain.f: MAIN fmain: Undefined first referenced symbol in file __ashldi3 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(move.o) __ashrdi3 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(sets.o) __fixtfdi /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(numtodec.o) ld: fatal: Symbol referencing errors. No output written to a.out
Lasse ich -lgpc -lm weg, erhalte ich:
$ f77 fmain.f mod01.o -g -L /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3 -lpfc -lpc
fmain.f: MAIN fmain: Undefined first referenced symbol in file _p_atexit mod01.o ld: fatal: Symbol referencing errors. No output written to a.out
==> Wie bringe ich f77 bei, wo _p_atexit (ich vermute das kommt von gpc) zu finden ist?
==> Gibt's eine Möglichkeit das Hauptprogramm fmain.f auch zuerst mit der `-c' Option zu kompilieren und dann von Hand zu linken?
Nichtsdestotrotz: Besten Dank an alle für die Hilfe und Unterstützung dich ich bereits erfahren durfte.
Gruss, Roland
-----Ursprüngliche Nachricht----- Von: gpc-de-owner@gnu.de [mailto:gpc-de-owner@gnu.de] Im Auftrag von Frank Heckenbach Gesendet: Mittwoch, 5. Februar 2003 19:31 An: gpc-de@gnu.de Betreff: Re: gpc Kompilat mit native F77 von SUN
Roland Rick schrieb:
Ups, da hab ich mich wohl zu undeutlich ausgedrückt.
Ziel ist mit gpc generierten Objectcode (*.o) mit SUN's f77
(muss Bedingung)
zu linken. Das Hauptprogramm ist in FORTRAN geschrieben; es sollen vorhandene PASCAL Module ohne grösseren Aufwand in ein
FORTRAN Programm
übernommen werden können (Heimarbeit).
Darauf bezieht sich doch meine Antwort.
Roland Rick schrieb:
Dass es mit g77 nicht klappte war, weil ich die Datei statt den Pfad zu libgpc.a angegeben hatte
Die Datei angeben, müsste normalerweise auch gehen (dann natürlich den vollen Dateinamen mit libgpc.a statt -lgpc).
Leider komm ich beim Verwenden von SUN's f77 als Compiler/Linker nicht ein bisschen weiter.
Gebe ich alle "muss" Libraries an, meldet der Linker:
$ f77 fmain.f mod01.o -g -L /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3 -lgpc -lm -lpfc -lpc
fmain.f: MAIN fmain: Undefined first referenced symbol in file __ashldi3 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(move.o) __ashrdi3 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(sets.o) __fixtfdi /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/libgpc.a(numtodec.o) ld: fatal: Symbol referencing errors. No output written to a.out
Dann musst du vermutlich noch -lgcc angeben (und halt libgcc.a bereit stellen). Ich denke nach -lgpc (evtl. mit den Reihenfolge der Libs experimentieren).
Lasse ich -lgpc -lm weg, erhalte ich:
[...]
==> Wie bringe ich f77 bei, wo _p_atexit (ich vermute das kommt von gpc) zu finden ist?
Das ist in -lgpc, das war vorher schon ok.
==> Gibt's eine Möglichkeit das Hauptprogramm fmain.f auch zuerst mit der `-c' Option zu kompilieren und dann von Hand zu linken?
Weiß ich nicht. Das betrifft wohl den Aufruf des Fortran-Compilers, den ich nicht kenne, also probier's einfach mal oder schau dir dessen Dokumentation an. Dürfte aber in jedem Fall nicht viel bringen, weil das Problem ja nicht beim Kompilieren, sondern beim Linken auftritt.
Frank