Wie ein 32-Bit-Binär auf einem 64-Bit-Linux-Rechner kompilieren, ohne die CFLAGS Umgebungsvariable zu berühren
-
16-09-2019 - |
Frage
Die Lösung in
Wie ein 32-Bit-Binärdatei mit gcc auf eine 64-Bit-linux-Maschine kompilieren / cmake
ist nicht möglich, weil ich 3rd-Party-Software und andere Sachen verwenden, die bereits die Variable CFLAGS verwendet. Und ihre Makefiles Patchen ist nicht erlaubt -. Sagt mein Chef
Also muss ich einen anderen Weg finden, um es zu erzwingen. Vielleicht auf eine 32-Bit-Version des Compilers einige Magie mit symbolischen Links einen Anruf umleiten gcc (in der Hoffnung, dass das Standardziel dynamisch nicht erkannt wird).
Lösung
Sie sind nicht zu ändern CFLAGS in Ihrer Umgebung erlaubt, aber gibt es einen Grund, warum Sie sind, können sie nicht vorübergehend für den Build außer Kraft setzen?
Für eine Autotool-basiertes Paket, würde ich zuerst versuchen:
CFLAGS="-m32" ./configure [opts]
make
make install
Ein gut geschriebener configure.ac
Datei sollte Ihre Variable CFLAGS respektieren und ihm anhängen, ohne dass Sie die Paketquelle zu ändern.
Aktualisieren
Unter der Annahme, dann, dass Sie nicht Ihre CC Variable neu definieren können, entweder, ich würde ein paar Weg Tricks spielen. Machen Sie einen Shell-Skript in ${HOME}/gcc32
genannt gcc
mit folgendem (ungetestet):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
Dann prepend dies auf Ihrem Weg, wenn Sie 32-Bit aufbauen wollen:
export PATH=${HOME}/gcc32:${PATH}
Offensichtliche Modifikationen unterstützen g++
, icc
oder andere Compiler.
Andere Tipps
Lassen Sie uns, dass gcc übernehmen und Freunde sind in "/ usr / bin" befindet. Nehmen wir an, dass Sie einen Ordner namens „~ / .local / bin“, die in Ihrem Weg.
: Sie können ein Bash-Skript namens "gcc" in "~ / .local / bin" wie erstellen#! /bin/bash /usr/bin/gcc -m32 $@
Sie können in ähnlicher Weise ein „g ++“ Skript mit dem Inhalt erstellen, wie folgt:
#! /bin/bash /usr/bin/g++ -m32 $@
Grundsätzlich Halten Sie tun dies für "c ++", "cc", "wie", "ld" usw. je nach Bedarf. Machen Sie die Skripte ausführbar. Stellen Sie sicher, dass "~ / .local / bin" in Ihrer Umgebungsvariable PATH vor "/ usr / bin". Wenn das der Fall ist, dann, wenn die Make-Datei ruft den Compiler (vorausgesetzt, sie relative Pfade verwendet wird), werden Ihre Skripte aufgerufen werden, statt.