105 votes

Comment ajouter les chemins include et lib au cycle configure/make ?

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 dire à ./configure de chercher les bibliothèques à cet endroit (en particulier, j'essaie de compiler emacs, qui a besoin de libgif, qui n'est pas fourni dans ma distro).

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

dans .bashrc mais cela ne semble pas fonctionner.

4 votes

Notez qu'à l'exception du PATH, vous écrasez ceux par défaut de votre système. Si vous faites quelque chose comme export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH votre compilateur cherchera d'abord dans ~/local/include et dans $C_INCLUDE_PATH seulement s'il n'a pas trouvé l'inclusion dans le premier répertoire.

108voto

William Pursell Points 56211

Vous voulez un fichier config.site. 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 invoquez un configure script généré par autoconf avec --prefix=$HOME/local, le config.site sera lu et toutes les assignations seront faites pour vous. CPPFLAGS et LDFLAGS devraient être tout ce dont vous avez besoin, mais vous pouvez également effectuer toutes les 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.

0 votes

William ; Un grand merci, c'était un conseil parfait sur les CPPFLAGS pour la construction sur un hôte partagé. J'ai évité bien des déboires avec des exécutions ./configure ratées aujourd'hui, grâce à votre remarque.

41voto

long404 Points 402

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 des milliards 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

1 votes

Lorsque j'ajoute LDFLAGS et CFLAGS à .bashrc ./configure échoue avec une erreur configure: : Le compilateur C ne peut pas créer d'exécutables...

0 votes

Ils remplacent probablement les paramètres du compilateur configure test code. Utilisez simplement le préchargement de make env. Essayez également de voir si configure n'a pas déjà une option pour écraser libgif. Si les autotools scripts sont correctement réalisés, ils vous permettront de spécifier un chemin où libgif est installé (par exemple, remplacer l'emplacement de la bibliothèque par défaut). Ce serait la solution la plus propre.

0 votes

Même différence.. tneme@ws16lab07:~/Descargas/emacs-23.3$ LDFLAGS="-L/home/tneme/local/lib" CFLAGS="-l/home/tneme/local/include" ./configure --prefix="/home/tneme/local" vérification du type de système de construction. .. i686-pc-linux-gnu vérification du type de système hôte... i686-pc-linux-gnu vérification de gcc... gcc vérification du fonctionnement du compilateur C... no configure : error : in /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log' pour plus de détails.

9voto

Samuel Points 303

Il a fallu du temps pour y arriver. 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

Notez que CFLAGS n'est pas utilisé avec autogen.sh/configure, l'utiliser m'a donné l'erreur : "configure : error : C compiler cannot create executables". Dans l'environnement de construction que j'utilisais, un autogen.sh script était fourni, si vous n'avez pas d'autogen.sh script remplacez ./autogen.sh par ./configure dans la commande ci-dessus. J'ai lancé config.guess sur le système cible pour obtenir le paramètre --host.

Après avoir exécuté avec succès 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 choisi d'utiliser sont : "-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 pourriez vouloir que certains includes pointent vers votre compilateur croisé et d'autres 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 d'inclusion qui pointent vers / et non /ccrootfs dans les Makefiles. J'aimerais bien savoir comment corriger cela. J'espère que cela aidera quelqu'un.

0voto

user2068018 Points 1

Par exemple, construire git en utilisant $HOME/curl

package=git
version=2.17.0

tarUrl=https://mirrors.edge.kernel.org/pub/software/scm/git/$package-$version.tar.gz
install(){
   ./configure --prefix=$HOME
   LDFLAGS="-L$HOME/lib" CFLAGS="-I$HOME/include" make -j 2
   make install
}
if [ -e $package-$version.tar.gz ]; then
   echo "cache"
else
   wget --no-check-certificate ${tarUrl}
   tar -xvf $package-$version.tar.gz
fi
cd ./$package-$version
install

0voto

chayleaf Points 1

Pour compléter les autres réponses, vous devez parfois définir PKG_CONFIG_PATH.

export PKG_CONFIG_PATH=~/local/lib/pkgconfig

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X