Comment compiler un binaire 32 bits sur une machine linux 64 bits sans toucher la variable d'environnement CFLAGS

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

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top