2010-06-04 3 views
10

Le commutateur --sysroot est utile lorsque vous ne souhaitez pas que les en-têtes/bibliothèques des chemins d'accès standard affectent votre génération.Alternatives au commutateur --sysroot de gcc?

--sysroot=dir: Utilisez dir comme le répertoire racine logique pour les en-têtes et bibliothèques . Par exemple, si le compilateur recherche normalement les en-têtes dans/usr/include et les bibliothèques dans/usr/lib, il recherche à la place dir/usr/include et dir/usr/lib. [ref]

la même chose peut être accompli grâce à l'utilisation de variables d'environnement, les specs gcc fichier, ou toute autre méthode qui ne nécessitent pas des commutateurs de ligne de commande?

Répondre

7

Si vous pouvez utiliser des variables d'environnement, vous pouvez ajouter --sysroot à CFLAGS.

3

Vous pouvez créer un script wrapper autour de gcc qui exécute le gcc réel avec les indicateurs souhaités. Cela fonctionne avec Makefiles et les constructions complexes qui gâchent avec des variables d'environnement. Vous devez seulement vous assurer que votre script gcc est plus tôt dans le PATH que le binaire gcc réel. Le script lui-même est à seulement deux lignes,

#!/bin/sh 
exec /usr/bin/gcc --sysroot=/your/sysroot "$@" 

et si $HOME/bin est au début de votre chemin, vous pouvez mettre le script dans $HOME/bin, et il n'affectera pas les autres utilisateurs.

Si vous avez un script configure qui ressemble expressément gcc à /usr/bin/, vous devrez peut-être renommer /usr/bin/gcc-/usr/bin/gcc.bin et nommez votre script /usr/bin/gcc. Cela affectera tous les utilisateurs. Si vous avez besoin, mais vous voulez également qu'il affecte seulement certains utilisateurs ou utilisateurs, utilisez

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

Vous pouvez faire des variantes, par exemple des comptes d'utilisateurs spécifiques ou des appartenances à des groupes pour définir un sysroot spécifique, en utilisant le même schéma.

+0

C'est la seule solution lorsque j'ai essayé de croiser AXIS2/C. Pour des raisons mystérieuses, le fichier makefile d'AXIS2/C vient de supprimer les options "--sysroot" que j'ai mises dans les variables d'environnement CFLAGS, LDFLAGS et LIBS lors de la liaison de la librairie sharedlib. J'ai également essayé de désactiver le partage avec l'option ./configure --disable-shared, mais l'éditeur de liens va se plaindre du bug "symbole dupliqué" lors de la dernière étape de la liaison. – RichardLiu

+0

@RichardLiu: Si vous utilisez 'util/autogen.sh' pour AXIS2/C 1.6.0, une nouvelle option de configuration' --with-sysroot = DIR' apparaît. Il semble que c'est seulement passé à libtool, cependant. L'ajout de l'option de configuration '--with-cflags-sysroot' (environ 30 lignes dans chaque' configure.ac') semble fonctionner. Voulez-vous essayer ce patch? L'ensemble du projet semble périmé, car il échoue sur le premier fichier qu'il essaie de compiler ('util/src/platforms/unix/uuid_gen_unix.c') sur ma machine dev. –

Questions connexes