Se puede compilar de 32 bits Apache DSOs (Oracle HTTP Server) en una máquina de 64 bits?

StackOverflow https://stackoverflow.com/questions/693733

Pregunta

He migrado una base de datos de Oracle y Oracle HTTP server instalación de un equipo de 32 bits a una de 64 bits de la máquina - máquinas que ejecutan Linux.Base de datos de Oracle es de 64 bits, pero el (Apache HTTP server es de 32 bits.

Yo uso no-Oracle DSOs (mod_ntlm una), pero cada vez que ejecuto el estándar de "make install" tipo de cosa termino con una de 64 bits del módulo.

Hay una manera estándar de compilación de 32 bits de módulos de Apache en una máquina de 64 bits?

¿Fue útil?

Solución

Como una alternativa a Andrew Medico de la respuesta, use '-m32"para 32 bits compilaciones y '-m64"para 64 bits compilaciones en PPC o SPARC o máquinas Intel - ya que en realidad no mencionar que la arquitectura de chip está utilizando y que la notación de obras en todos ellos.

Yo uso a menudo:

CC="gcc -m32" ./configure

para asegurarse de 32 bits compilación (o, más frecuentemente, CC="gcc -m64" para asegurarse de 64 bits compilación).


Pregunta:"CC es una variable de entorno utilizadas por hacer?"

Respuesta:Sí, aunque en este caso, también es reconocido por configure, que es un shell script generado por autoconf.La notación que se utiliza - que es lo que yo uso en la línea de comandos conjuntos de CC en el medio ambiente, mientras que el configure comando se ejecuta.La otra respuesta sugiere el uso de:

./configure CC="gcc -m32"

Supongo que funciona y logra el mismo efecto;No lo he probado así que no sé que funciona.

Si ejecuta ./configure --help | less, verá información (a menudo sólo el estándar de la información) acerca de cómo utilizar la secuencia de comandos.Y al final, aparecerá una lista de (algunos de) variables de entorno correspondientes, de que CC es uno.

La ventaja de la configuración de la C compilador "gcc-m32" es que la versión de 32 bits de la bandera se establece cada vez que el compilador se utiliza - hay muy poco espacio para que vaya mal.Si un conjunto de indicadores de la variable (CFLAGS, etc), hay una posibilidad de que algunos comandos no la usamos, y entonces las cosas pueden ir mal.

También, volviendo a la pregunta, make ciertamente, se utiliza una variable (macro) CC.Y se puede establecer que en la línea de comandos:

make CC="gcc -m32"

Que anula cualquier configuración en el fichero makefile.Por el contrario, el uso de una variable de entorno, la configuración en el archivo makefile reemplaza el valor en el medio ambiente, por lo que el establecimiento de CC como una variable de entorno es menos útil.Aunque make -e da el entorno prioridad sobre el archivo makefile, que es generalmente una opción peligrosa para usar - se puede tener inesperados efectos secundarios.

Otros consejos

./configure CFLAGS="-march=i686" 

debería hacerlo

Junto con la bandera -m32 en gcc, se puede necesitar incluir la bandera -melf_i386 de LD para vincular adecuadamente los ficheros objeto de 32 bits a los bibliotecas de 32 bits si tiene tanto las bibliotecas de 32 bits y 64 bits. El LD estándar en cajas de 64 bits de Linux por defecto para las bibliotecas de 64 bits y se obtiene un error de compatibilidad cuando se produce la vinculación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top