Comment compiler un binaire 32 bits sur une machine linux 64 bits sans toucher la variable d'environnement CFLAGS
-
16-09-2019 - |
Question
La solution
Comment compiler un fichier binaire 32 bits sur une machine linux 64 bits avec gcc / cmake
est pas possible parce que j'utilise le logiciel 3ème partie et d'autres choses qui utilise déjà la variable CFLAGS. Et patcher leurs makefiles ne sont pas autorisés -. Dit mon patron
Alors je dois trouver une autre façon de l'appliquer. Peut-être un peu de magie avec des liens symboliques redirigeant un appel à gcc à une version 32 bits du compilateur (en espérant que la cible par défaut n'est pas détecté dynamiquement).
La solution
Vous n'êtes pas autorisé à changer CFLAGS dans votre environnement, mais est-il une raison quelconque vous ne peut pas remplacer temporairement pour la construction?
Pour un ensemble basé Autotool, je voudrais tout d'abord essayer:
CFLAGS="-m32" ./configure [opts]
make
make install
Un fichier configure.ac
bien écrit doit respecter votre variable CFLAGS et ajouter à elle, sans vous obliger à modifier la source du package.
Mise à jour
En supposant donc que vous ne pouvez pas redéfinir votre variable CC, que ce soit, je jouerais quelques trucs de chemin. Faire un script shell dans ${HOME}/gcc32
appelé gcc
avec les éléments suivants (non testé):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
Alors préfixer ceci à votre chemin quand vous voulez construire 32 bits:
export PATH=${HOME}/gcc32:${PATH}
Des modifications évidentes soutiendront g++
, icc
, ou tout autre compilateur.
Autres conseils
Supposons que gcc et les amis se trouvent dans « / usr / bin ». Supposons également que vous avez un dossier appelé « ~ / .local / bin » qui est dans votre chemin. Vous pouvez créer un script bash nommé "gcc" dans "~ / .local / bin" comme:
#! /bin/bash /usr/bin/gcc -m32 $@
Vous pouvez créer un script de la même "g ++" avec le contenu comme suit:
#! /bin/bash /usr/bin/g++ -m32 $@
En fait, continuer à faire cela pour "c ++", "cc", "comme", "ld", etc., au besoin. Effectuez les scripts exécutables. Assurez-vous que "~ / .local / bin" est dans votre variable d'environnement PATH avant "/ usr / bin". Si tel est le cas, lorsque le makefile appelle le compilateur (en supposant qu'ils ont utilisé des chemins relatifs), vos scripts seront appelées, au lieu.