Christian Seiler: -Extensions(.so) für andere Linux-Version bauen

Beitrag lesen

Hallo Andreas,

Wenn ich mir PHP mir ./configure; make; make install baue, dann wird das doch vermutlich mit meinem standarmäßigen gcc-Compiler kompiliert, oder?

Ja.

Ich glaube dass mein Provider irgend eine 7.x Version von RedHat verwendet, ich aber RedHat 9, und wenn ich mich nicht irre verwendet RedHat 9 einen neuere gcc Version die nicht mit alten Verionen kompatibel ist, oder?

Keine Ahnung. Theoretisch gesehen sollten alle gcc-Versionen zueinander kompatibel sein, wenn der Distributor es "richtig" macht:

christian@midnight:~/gcc-test$ gcc --version
2.95.4
christian@midnight:~/gcc-test$ gcc-3.2 --version
gcc-3.2 (GCC) 3.2.3 20030309 (Debian prerelease)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

--------------------- test.c --------------------------
#include <stdio.h>
#include <string.h>

int print_test (char *s) {
        printf ("%s\n", s);
        return strlen (s);
}
-------------------------------------------------------

--------------------- test2.c -------------------------
#include <stdio.h>

int print_test (char *s);

int main (int argc, char **argv) {
        int i = print_test ("Hallo Welt!");
        printf ("%d\n", i);
        return 0;
}
-------------------------------------------------------

christian@midnight:~/gcc-test$ gcc -Wall -c -o test.o test.c
christian@midnight:~/gcc-test$ ld -shared -o test.so test.o
christian@midnight:~/gcc-test$ gcc-3.2 -Wall test2.c test.so
christian@midnight:~/gcc-test$ ./a.out
Hallo Welt!
11
christian@midnight:~/gcc-test$ gcc-3.2 -Wall -c -o test.o test.c
christian@midnight:~/gcc-test$ ld -shared -o test.so test.o
christian@midnight:~/gcc-test$ gcc -Wall test2.c test.so
christian@midnight:~/gcc-test$ ./a.out
Hallo Welt!
11

Also bei mir gibt es keine Inkompabilitäten - allerdings verwende ich auch kein RedHat.

Das Problem, das Du vielmehr hast, sind unterschiedliche Bibliotheken, gegen die PHP bzw. Deine Extension gelinkt ist; außerdem können unterschiedliche Versionen von binutils (das Paket, bei dem der Linker und noch einige andere Tools dabei ist) Dir auch noch einen Streich spielen.

Was möglich wäre, wäre sogenanntes "Cross-Compiling" - ich könnte auf einem Linux-i386-Rechner theoretisch Linux-PowerPC-Programme herstellen - allerdings habe ich davon weniger als 0 Ahnung.

Also dass meine .so Dateien die ich unter RedHat 9 erstelle auch unter RedHat 7.x lauffähig sind?

Das Problem ist, wie schon geschrieben, dass Deine .so-Dateien ja selbst andere .so-Dateien brauchen. Auf Deinem System sind aber andere Versionen vorhanden als auf dem System Deines Hosters. Daher wirst Du den Webserverprozess - sofern PHP als Modul installiert ist - oder halt den CGI-Prozess ins Datennirvana befördern, wenn Du eine Redhat-9-.so-Datei unter einem Redhat-7-System zu laden versuchst.

Die einfachste Lösung, die ich Dir empfehlen könnte, wäre einfach nochmal Redhat 7.x (halt die Version, die Dein Hoster hat) auf Deine Kiste zu installieren und dort das Modul zu kompilieren - das ist narrensicher.

Viele Grüße,
Christian

--
Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!