você pode compilar 32 bits Apache DSOs (Oracle HTTP Server) em uma máquina de 64 bits?

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

Pergunta

Eu migrou um banco de dados Oracle e Oracle HTTP Server e instalar a partir de uma máquina de 32 bits para uma máquina de 64 bits - ambas as máquinas rodando Linux. Oracle Database é de 64 bits, mas o servidor (Apache) HTTP é de 32 bits.

Eu uso um pouco não-Oracle ORD (mod_ntlm para um) mas sempre que eu executar o padrão "make install" tipo de coisa que eu acabar com um módulo de 64-bit.

Existe uma maneira padrão para compilar módulos do Apache de 32 bits em uma máquina de 64 bits?

Foi útil?

Solução

Como uma alternativa para a resposta de Andrew Medico, use '-m32' para compilações de 32 bits e '-m64' para compilações de 64 bits em PPC ou máquinas SPARC ou Intel - desde que você realmente não mencionou qual arquitetura de chip que você está usando e que a notação funciona em todos estes.

Costumo usar:

CC="gcc -m32" ./configure

para assegurar uma compilação de 32 bits (ou, mais frequentemente, CC="gcc -m64" para garantir 64 bits compilação).


Pergunta: "É CC uma variável de ambiente utilizado por marca"

Resposta: Sim, embora, neste caso, também é reconhecido por configure, que é um shell script gerado pelo autoconf. A notação eu usei - que é o que eu uso na linha de comando - conjuntos CC no ambiente enquanto o comando configure é executado. A outra resposta sugere o uso de:

./configure CC="gcc -m32"

Eu suponho que as obras e alcança o mesmo efeito; Eu não tentei isso para que eu não sei que ele funciona.

Se você executar ./configure --help | less, você verá informações (informações muitas vezes apenas standard) sobre como usar o script. E no final, ele irá listar (algumas das) as variáveis ??de ambiente relevantes, dos quais CC é um deles.

A vantagem de definir o compilador C para "gcc -m32" é que a bandeira 32-bit é definido cada vez que o compilador é usada - há muito pouco espaço para que ele vá errado. Se você definir uma variável bandeiras (CFLAGS, etc), há uma chance de que algum comando não vai usá-lo, e então as coisas podem dar errado.

Além disso, voltando à pergunta, make certamente usa uma variável (macro) chamado CC. E você pode definir que na linha de comando make:

make CC="gcc -m32"

que substitui qualquer configuração no makefile. Por outro lado, usando uma variável de ambiente, a configuração no makefile substitui o valor no ambiente, assim, definir CC como uma variável de ambiente é menos útil. Embora make -e dá a precedência ambiente sobre o makefile, geralmente é uma opção perigosa para uso -. Ele pode ter efeitos colaterais inesperados

Outras dicas

./configure CFLAGS="-march=i686" 

deve fazê-lo

Junto com a bandeira -m32 no gcc, você pode precisar de incluir o sinalizador -melf_i386 para ld para vincular adequadamente os arquivos de 32 bits objeto para as bibliotecas de 32 bits se você tiver ambas as bibliotecas de 32bit e 64bit. O ld padrão em caixas de 64 bits do Linux será o padrão para as bibliotecas de 64 bits e você terá um erro de compatibilidade quando a ligação ocorre.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top