você pode compilar 32 bits Apache DSOs (Oracle HTTP Server) em uma máquina de 64 bits?
-
22-08-2019 - |
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?
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.