Comment ajouter des chemins include et lib pour configurer / faire un cycle?

J'ai besoin d'un endroit pour installer des bibliothèques dans une boîte linux à laquelle je n'ai pas accès. J'utilise ~ / local[/bin, / lib, / include], mais je ne sais pas comment le dire ./ configure pour rechercher des bibliothèques là-bas (en particulier, j'essaie de compiler emacs, qui a besoin de libgif, qui ne vient pas dans ma distribution).

J'ai essayé d'ajouter

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

À .bashrc mais cela ne semble pas fonctionner.

59
demandé sur Mateusz Piotrowski 2011-09-27 01:25:25

3 réponses

Vous voulez une configuration.site fichier. Essayez:

$ mkdir -p ~/local/share
$ cat << EOF > ~/local/share/config.site
CPPFLAGS=-I$HOME/local/include
LDFLAGS=-L$HOME/local/lib
...
EOF

Chaque fois que vous appelez un script de configuration généré par autoconf avec --prefix= $ HOME / local, la configuration.site sera lu et toutes les missions seront faites pour vous. CPPFLAGS et LDFLAGS devraient être tout ce dont vous avez besoin, mais vous pouvez également effectuer d'autres affectations souhaitées (d'où le ... dans l'exemple ci-dessus). Notez que les drapeaux-I appartiennent à CPPFLAGS et non à CFLAGS, car-I est destiné au pré-processeur et non au compilateur.

78
répondu William Pursell 2011-10-01 08:33:39

Définissez LDFLAGS et CFLAGS lorsque vous exécutez make:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

Si vous ne voulez pas faire cela un million de fois, exportez - les dans votre .bashrc (ou votre équivalent shell). Définissez également LD_LIBRARY_PATH pour inclure / home / me/local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib
25
répondu long404 2015-06-19 02:58:14

Cela a pris un certain temps pour obtenir le droit. J'ai eu ce problème lors de la compilation croisée dans Ubuntu pour une cible ARM. Je l'ai résolu avec:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf

Avis CFLAGS n'est pas utilisé avec autogen.sh/configure, l'utiliser m'a donné l'erreur: "configure: error: le compilateur C ne peut pas créer d'exécutables". Dans l'environnement de construction, j'utilisais un autogen.sh script a été fourni, si vous n'avez pas autogen.sh substitut de script. /autogen.sh avec ./configurer dans la commande ci-dessus. J'ai couru config.devinez sur le système cible récupère le paramètre -- host.

Après l'exécution réussie autogen.sh/configure, compiler avec:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

CFLAGS j'ai choisi d'utiliser étaient les suivants: "-march=armv5te -fno-arbre-vectorisation -mthumb-interfonctionnement -mcpu=arm926ej-s". Il faudra un certain temps pour que tous les répertoires include soient correctement configurés: vous voudrez peut-être que certains includes pointent vers votre compilateur croisé et d'autres pointent vers votre système de fichiers racine, et il y aura probablement des conflits.

Je suis sûr que ce n'est pas le réponse parfaite. Et je vois encore certains répertoires d'inclusion pointant vers /et non / ccrootfs dans les Makefiles. Aimerais savoir comment remédier à cela. Espérons que cela aide quelqu'un.

8
répondu Samuel 2013-05-24 20:06:02