Come compilare un binario a 32 bit su macchina Linux a 64 bit senza toccare la variabile d'ambiente CFLAGS
-
16-09-2019 - |
Domanda
La soluzione in
Come compilare un binario a 32 bit su una macchina Linux a 64-bit con gcc / cMake
Non è possibile perché io uso 3rd software di terze parti e altre cose che sta utilizzando già la variabile CFLAGS. E patch loro makefile non è permesso -. Dice il mio capo
Quindi, devo trovare un altro modo di farla rispettare. Forse qualche magia con i collegamenti simbolici riorientare una chiamata a gcc a una versione a 32 bit del compilatore (sperando che il target di default non viene rilevata in modo dinamico).
Soluzione
Non è consentito cambiare CFLAGS nel vostro ambiente, ma c'è qualche motivo non siete in grado di ignorare temporaneamente per la costruzione?
Per un pacchetto Autotool-based, vorrei provare prima:
CFLAGS="-m32" ./configure [opts]
make
make install
Un file configure.ac
ben scritto dovrebbe rispettare la variabile CFLAGS e aggiungere ad esso, senza che sia necessario modificare il sorgente del pacchetto.
Aggiorna
Supponendo, quindi, che non si può ridefinire la variabile CC, sia, vorrei giocare alcuni trucchi del percorso. Fare uno script di shell in ${HOME}/gcc32
chiamato gcc
con il seguente (non testato):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
Poi anteporre questo al vostro percorso quando si vuole costruire a 32 bit:
export PATH=${HOME}/gcc32:${PATH}
ovvie modifiche sosterranno g++
, icc
, o qualsiasi altro compilatore.
Altri suggerimenti
Supponiamo che gcc e gli amici si trovano in "/ usr / bin". Supponiamo inoltre di avere una cartella chiamata "~ / .local / bin" che è nel tuo percorso. È possibile creare uno script bash chiamato "gcc" in "~ / .local / bin" come:
#! /bin/bash /usr/bin/gcc -m32 $@
È possibile creare un simile "g ++" script con il contenuto nel modo seguente:
#! /bin/bash /usr/bin/g++ -m32 $@
In sostanza, continuare a fare questo per "C ++", "cc", "come", "LD", ecc, se necessario. Rendere gli script eseguibile. Assicurarsi che "~ / .local / bin" è nella tua variabile d'ambiente PATH prima "/ usr / bin". Se questo è il caso, poi, quando il makefile invoca il compilatore (ammesso che utilizzati percorsi relativi), verranno richiamati i vostri script, invece.