Como compilar um binário de 32 bits em um máquinas Linux de 64 bits sem tocar a variável de ambiente CFLAGS

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

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).

Foi útil?

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.

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