Wie ein 32-Bit-Binär auf einem 64-Bit-Linux-Rechner kompilieren, ohne die CFLAGS Umgebungsvariable zu berühren

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

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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top