Domanda

Ho migrato un database Oracle e server HTTP Oracle installano da una macchina a 32 bit ad una macchina a 64-bit - entrambe le macchine con Linux. Oracle Database è a 64 bit, ma il (Apache) server HTTP è a 32 bit.

Faccio uso di alcune non-Oracle DSO (mod_ntlm per uno), ma ogni volta che ho eseguito lo standard "make install" tipo cosa che finisce con un modulo a 64 bit.

C'è un modo standard per compilare moduli di Apache a 32 bit su un computer a 64 bit?

È stato utile?

Soluzione

In alternativa alla risposta di Andrew Medico, utilizzare '-m32' per le compilation a 32 bit e '-m64' per le compilation a 64 bit su PPC o macchine SPARC o Intel - dal momento che in realtà non accennate quale architettura dei chip si sta utilizzando e che la notazione funziona su tutti questi.

Io uso spesso:

CC="gcc -m32" ./configure

al fine di garantire una compilazione a 32 bit (o, più frequentemente, CC="gcc -m64" per garantire a 64 bit di compilazione).


Domanda: "CC è una variabile di ambiente utilizzato da make"

Risposta: Sì, anche se in questo caso, è anche riconosciuto da configure, che è uno script di shell generato da autoconf. La notazione che ho usato - che è quello che uso a riga di comando - imposta CC nell'ambiente, mentre il comando configure viene eseguito. L'altra risposta suggerisce di utilizzare:

./configure CC="gcc -m32"

Presumo che funziona e raggiunge più o meno lo stesso effetto; Io non ho provato quindi non so che funziona.

Se si esegue ./configure --help | less, vedrete le informazioni (spesso solo informazioni standard) su come utilizzare lo script. E alla fine, elencherà (alcune) variabili d'ambiente rilevanti, di cui è uno CC.

Il vantaggio di impostare il compilatore C per "gcc -m32" è che la bandiera a 32 bit viene impostato ogni volta che il compilatore è utilizzato - c'è ben poco spazio per farlo andare male. Se si imposta un flag variabile (CFLAGS, ecc), c'è la possibilità che qualche comando non usarlo, e poi le cose possono andare a monte.

Inoltre, tornando alla domanda, make utilizza certamente una variabile (macro) chiamato CC. Ed è possibile impostare che sulla riga di comando make:

make CC="gcc -m32"

che si sostituiscono ad impostazione nel makefile. Al contrario, utilizzando una variabile di ambiente, l'impostazione nel makefile sostituisce il valore nell'ambiente, così modificando CC come una variabile ambiente è meno utile. Anche se make -e dà all'ambiente la precedenza sul makefile, di solito è una scelta pericolosa da usare -. Può avere inaspettati effetti collaterali

Altri suggerimenti

./configure CFLAGS="-march=i686" 

dovrebbe farlo

Insieme con la bandiera -m32 nel GCC, potrebbe essere necessario includere il flag -melf_i386 per ld a collegare correttamente i file oggetto a 32 bit per le librerie a 32bit se si dispone di entrambe le librerie a 32bit e 64bit. La ld standard su scatole a 64 bit di Linux imposterà le librerie a 64 bit e si ottiene un errore di compatibilità quando si verifica il collegamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top