2010-06-04 8 views
10

Der Schalter --sysroot ist nützlich, wenn Sie nicht möchten, dass die Header/Bibliotheken in den Standardpfaden Ihren Build beeinflussen.Alternativen zum --sysroot Switch von gcc?

--sysroot=dir: Verwenden dir als logische Stammverzeichnis für Kopf- und Bibliotheken. Wenn der Compiler normalerweise nach Kopfzeilen in/usr/include und Bibliotheken in/usr/lib sucht, sucht er stattdessen nach dir/usr/include und dir/usr/lib. [ref]

Kann die gleiche Sache durch die Verwendung von Umgebungsvariablen durchgeführt werden, die gcc Spezifikationen Datei oder andere Methoden, die keine Befehlszeilenoptionen benötigen?

Antwort

7

Wenn Sie Umgebungsvariablen verwenden können, können Sie CFLAGS --sysroot hinzufügen.

3

Sie können ein Wrapper-Skript um gcc erstellen, das den tatsächlichen gcc mit den gewünschten Flags ausführt. Dies funktioniert mit Makefiles und komplexen Builds, die mit Umgebungsvariablen umgehen. Sie müssen nur sicherstellen, dass Ihr gcc-Skript früher im PATH ist als die tatsächliche gcc-binäre. Das Skript selbst ist nur zwei Linien,

#!/bin/sh 
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]" 

und wenn $HOME/bin früh in Ihrer PATH ist, können Sie das Skript in $HOME/bin setzen, und es wird keine anderen Benutzer betreffen.

Wenn Sie ein configure Skript, das ausdrücklich für gcc in /usr/bin/ aussieht, können Sie /usr/bin/gcc-/usr/bin/gcc.bin, umbenennen müssen und Ihr Skript /usr/bin/gcc nennen. Dies betrifft alle Benutzer. Wenn Sie diese benötigen, sondern auch wollen, dass es nur bestimmte Benutzer oder Benutzer beeinflussen, verwenden

#!/bin/sh 
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]" 
exec /usr/bin/gcc.bin "[email protected]" 

können Sie Varianten tun, zum Beispiel bestimmte Benutzerkonten oder Gruppenmitgliedschaften zum Festlegen eines bestimmten Sysroot mit demselben Schema.

+0

Dies ist die einzige Lösung, wenn ich versucht habe, AXIS2/C zu kompilieren. Aus einigen mysteriösen Gründen hat das Makefile von AXIS2/C nur die "--sysroot" -Optionen entfernt, die ich in die Umgebungsvariable CFLAGS, LDFLAGS und LIBS bei der Verknüpfung der sharedlib eingefügt habe. Ich hatte auch versucht, shared mit ./configure --disable-shared Option zu deaktivieren, aber der Linker wird "Duplicated Symbol" Fehler während der letzten Verknüpfung stufe beschweren. – RichardLiu

+0

@RichardLiu: Wenn Sie 'util/autogen.sh' für AXIS2/C 1.6.0 ausführen, wird eine neue Konfigurationsoption" --with-sysroot = DIR "erstellt. Es sieht so aus, als wäre es nur an Libtool weitergegeben worden. Das Hinzufügen der Konfigurationsoption "--with-cflags-sysroot" (etwa 30 Zeilen in jedem "configure.ac") scheint zu funktionieren. Möchtest du diesen Patch ausprobieren? Das gesamte Projekt scheint veraltet zu sein, da es bei der ersten Datei, die es zu kompilieren versucht ('util/src/platforms/unix/uuid_gen_unix.c') auf meinem Dev-Rechner scheitert. –

Verwandte Themen