Egbert Seibertz schrieb:
ich hab' ein kleines CGI in PASCAL geschrieben und der gpc hat's mir übersetzt:
# P -static Weisel_Zucht.pas /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/libgpc.a(rts.o): In function `_p_CGetPwEnt': /usr/src/tarfiles/DL/gcc/gcc-3.3.4/gcc/p/rts/rts.c:2563: warning: Using 'getpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
von diesen Warnungen gibt's noch mehr ...
Bei halbwegs modernen glibc-Versionen ist das leider normal. Bestimmte Funktionen kann sie nicht statisch linken. Das ist aber kein Problem, so lange man sie nicht benutzt. Das GPC-Laufzeitsystem referenziert sie zwar, aber wenn sie nicht aufgerufen werden, stört es nicht. So weit ich weiß, betrifft das i.w. Funktionen zur Benutzer- und Netzwerkinformation (z.B. eben "getpwent" (s.o.) oder DNS).
local läuft das Programm und macht was es soll ... hier läuft: 2.6.23.14-e3 #1 PREEMPT vom Februar # ldd $(which WZ) linux-gate.so.1 => (0xffffe000) libm.so.6 => /lib/libm.so.6 (0xb7eae000) libc.so.6 => /lib/libc.so.6 (0xb7d66000) /lib/ld-linux.so.2 (0xb7ef5000)
auf dem http-Sever läuft: 2.4.22-e17 #3 SMP von vor fünf Jahren ... da sagt mir der Rechner: # WZ FATAL: kernel too old Speicherzugriffsfehler
Ah, den kannte ich noch nicht. Anscheinend sind neue glibc-Versionen nur noch begrenzt abwärtskompatibel zu älteren Kerneln. Ich fürchte, das gibt es nur zwei Lösungen:
- Neuerer Kernel auf dem Zielsystem (willst du ja anscheinend nicht; ich weiß nicht, ob ein neuerer 2.4 gehen würde, müsste man recherchieren, das wäre vielleicht noch recht schmerzlos; ein Upgrade von 2.4 auf 2.6 würde ich auf einem aktiven Server auch nicht einfach so probieren).
- Programm mit älterer glibc (oder sogar libc5) bauen. Du kannst die neben die aktuelle installieren und z.B. mit entsprechenden Pfad-Optionen (-L für die Bibliothek und -I für die C-Header) dafür sorgen, dass der Compiler die alte findet. Dann erst mal das GPC-RTS und dann dein Programm compilieren. Klingt auch etwas lästig.
Vielleicht ist es sogar am einfachsten, GPC (inkl. RTS) auf dem Zielrechner zu bauen und dort dein Programm zu compilieren. (Du musst ihn nicht systemweit installieren, wenn das ein Problem ist, du kannst ihn in irgendeinem Verzeichnis bauen, wenn du "--prefix" beim "configure" angibst. Du brauchst allerdings ein paar 100 MB Plattenplatz dafür.)
Frank