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.
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.