Frage

Ich habe eine Oracle-Datenbank und Oracle HTTP-Server migriert von einer Maschine auf einen 64-Bit-Rechner 32-Bit installieren - beide Maschinen Linux. Oracle Database ist 64-Bit, aber der (Apache) HTTP-Server ist 32-Bit.

verwende ich einig Nicht-Oracle DSOs (mod_ntlm für eine Person), aber wenn ich den Standard laufen "make install" Typ, was ich mit einer 64-Bit-Modul am Ende.

Gibt es eine Standardmethode 32-Bit-Apache-Module auf einer 64-Bit-Maschine zu kompilieren?

War es hilfreich?

Lösung

Als Alternative zu Andrew Medico Antwort, verwenden Sie ‚-m32‘ für 32-Bit-Compilations und ‚-m64‘ für 64-Bit-Compilations auf PPC oder SPARC oder Intel-Maschinen - da man eigentlich nicht erwähnen, welche Chip-Architektur Sie verwenden und dass Notation arbeitet auf allen von diesen.

ich oft verwenden:

CC="gcc -m32" ./configure

eine 32-Bit-Zusammenstellung zu gewährleisten (oder, häufiger, CC="gcc -m64" 64-Bit-Kompilation zu gewährleisten).


Frage: "Ist CC eine Umgebungsvariable von make verwendet"

Antwort: Ja, wenn auch in diesem Fall ist es auch von configure erkannt wird, die ein Shell-Skript von autoconf erzeugt wird. Die Notation I verwendet - das ist, was ich in der Befehlszeile verwenden - setzt CC in der Umgebung während des configure Befehl ausgeführt wird. Die andere Antwort schlägt vor, mit:

./configure CC="gcc -m32"

Ich gehe davon aus, dass die Arbeiten und den gleichen Effekt erzielt; Ich habe nicht versucht, es so weiß ich nicht, dass es funktioniert.

Wenn Sie ./configure --help | less ausführen, werden Sie sehen Informationen (oft nur Standardinformationen) darüber, wie das Skript zu verwenden. Und am Ende, es wird eine Liste (ein Teil der) relevanten Umgebungsvariablen, von denen CC ist.

Der Vorteil der Einstellung der C-Compiler „gcc -m32“ ist, dass die 32-Bit-Flag jedes Mal gesetzt werden der Compiler verwendet wird - es gibt sehr wenig Platz ist für es schief zu gehen. Wenn Sie eine Variable Flags (CFLAGS, etc) gesetzt ist, gibt es eine Chance, dass einige Befehl wird es nicht verwendet werden, und dann können die Dinge schief gehen.

Auch auf die Frage zurück, verwendet make sicherlich eine Variable (Makro) CC genannt. Und Sie können, dass auf der make Befehlszeile:

make CC="gcc -m32"

Das ist eine Einstellung in der Make-Datei überschreibt. Im Gegensatz dazu eine Umgebungsvariable verwenden, überschreibt die Einstellung in der Make-Datei den Wert in der Umgebung, so CC Einstellung als eine Umgebungsvariable weniger hilfreich ist. Obwohl make -e die Umwelt Vorrang vor der Make-Datei gibt, ist es in der Regel eine gefährliche Option zu verwenden, -. Es unerwartete Nebenwirkungen haben kann

Andere Tipps

./configure CFLAGS="-march=i686" 

sollte es tun

Neben der -m32 Flagge in gcc, können Sie den -melf_i386 Flag für ld umfassen müssen, um richtig verknüpfen, um die 32-Bit-Objektdateien zu den 32-Bit-Bibliotheken, wenn Sie sowohl die 32-Bit- und 64-Bit-Bibliotheken haben. Der Standard-ld auf 64-Bit-Linux-Boxen wird auf die 64-Bit-Bibliotheken standardmäßig und Sie einen Kompatibilitätsfehler erhalten, wenn die Verbindung auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top