Come compilare un binario a 32 bit su macchina Linux a 64 bit senza toccare la variabile d'ambiente CFLAGS

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

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top