Como compilar um binário de 32 bits em um máquinas Linux de 64 bits sem tocar a variável de ambiente CFLAGS
-
16-09-2019 - |
Pergunta
A solução
Como compilar um binário de 32 bits em uma máquina linux 64 bits com gcc / cmake
não é possível porque eu uso 3ª software festa e outras coisas que está usando a variável CFLAGS já. E remendar suas makefiles não é permitido -. Diz meu chefe
Então, eu tenho que encontrar outra maneira de aplicá-la. Talvez um pouco de magia com links simbólicos redirecionar uma chamada para o gcc para uma versão de 32 bits do compilador (esperando que o destino padrão não é detectado dinamicamente).
Solução
Você não tem permissão para CFLAGS mudanças em seu ambiente, mas há alguma razão você não pode substituí-lo temporariamente para a construção?
Para um pacote baseado em Autotool, eu tentaria primeiro:
CFLAGS="-m32" ./configure [opts]
make
make install
Um arquivo configure.ac
bem escrito deve respeitar a variável CFLAGS e anexar a ele, sem a necessidade de modificar a origem do pacote.
Atualizar
Supondo, então, que você não pode redefinir sua variável de CC, ou, gostaria de jogar alguns truques de caminho. Fazer um script shell em ${HOME}/gcc32
chamado gcc
com o seguinte (não testado):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
Então preceder esta ao seu caminho quando você quer construir 32 bits:
export PATH=${HOME}/gcc32:${PATH}
modificações óbvias apoiará g++
, icc
, ou qualquer outro compilador.
Outras dicas
Vamos supor que gcc e amigos estão localizados em "/ usr / bin". Vamos supor também que você tem uma pasta chamada "~ / .local / bin" que está em seu caminho. Você pode criar um script chamado "gcc" em "~ / .local / bin" como:
#! /bin/bash /usr/bin/gcc -m32 $@
Você pode criar um semelhante "g ++" script com o conteúdo da seguinte forma:
#! /bin/bash /usr/bin/g++ -m32 $@
Basicamente, continuar fazendo isso para "c ++", "cc", "como", "ld", etc., conforme necessário. Faça os scripts executável. Certifique-se de que "~ / .local / bin" está na sua variável de ambiente caminho antes "/ usr / bin". Se for esse o caso, então quando o makefile invoca o compilador (assumindo que eles usaram caminhos relativos), seus scripts será invocado, em vez disso.