web-dev-qa-db-fra.com

Comment ajouter des chemins d'accès include et lib pour configurer / make 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 puis-je dire à ./configure de rechercher des bibliothèques là-bas (en particulier, j'essaie de compiler emacs, ce qui nécessite 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.

68
Lacrymology

Vous voulez un fichier config.site. Essayer:

 $ 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, le fichier config.site sera lu et toutes les assignations seront effectuées pour vous. CPPFLAGS et LDFLAGS devraient suffire, mais vous pouvez également effectuer toute autre tâche de votre choix (d'où le ... dans l'exemple ci-dessus). Notez que les indicateurs -I appartiennent à CPPFLAGS et non à CFLAGS, car -I est destiné au pré-processeur et non au compilateur.

92
William Pursell

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 le souhaitez pas, 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
27
long404

Cela a pris du temps pour bien faire les choses. 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, son utilisation m'a donné l'erreur suivante: "configure: erreur: le compilateur C ne peut pas créer d'exécutables". Dans l'environnement de construction, j'utilisais un script autogen.sh, mais si vous n'avez pas de script autogen.sh, remplacez ./autogen.sh par ./configure dans la commande ci-dessus. J'ai exécuté config.guess sur le système cible pour obtenir le paramètre --Host.

Après avoir exécuté autogen.sh/configure, compilez 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

Les CFLAGS que j'ai choisis d’utiliser étaient les suivants: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Il faudra un certain temps pour que tous les répertoires include soient correctement configurés: vous souhaiterez peut-être que certains inclus pointent vers votre compilateur croisé et certains pointant vers votre système de fichiers racine, et il y aura probablement des conflits.

Je suis sûr que ce n'est pas la réponse parfaite. Et je vois encore des répertoires include pointant vers/et non/ccrootfs dans les Makefiles. J'adorerais savoir comment corriger cela. J'espère que ça aide quelqu'un.

8
Samuel