Cross-compilation

Bonjour,

Je n’avais jamais fait de cross-compilation avant, j’ai bien ajouté le chemin où se trouvent les ficheirs .pc dans la variavle d’environnement PKG_PACKAGE_PATH, mais j’ai un probleme :

lorsque je fait #include <glib.h>
j’ai une erreur me disant que qu’il ne le trouve pas, or si je met le chemin complet :

#include “blabla … /glib.h”

Cette fois c’est les fichiers inclus dans glib.h (par exemple glib/blabla.h) qu’il ne trouve pas … Quelqu’un s’y connait la dedans ?

Merci beaucoup,
Nico

C’est bizarre, ta variable PKG_PACKAGE_PATH ne me dit rien et je n’ai rien trouvé sur google à son sujet.

Le pb ne vient AMA pas d’un quelconque PACKAGE_PATH, mais plutot d’un path pour les include. Je ne me souviens pas de la variable d’environnement pour passer des options de compil à gcc, mais il faudrait que tu lui dise de compiler avec un -I /le/chemin/vers/tes/include/, soit en surchargeant les règles dans ton makefile, soit en retrouvant le nom de la variable avec les options de gcc (GCC_OPTIONS ?)

Sinon, tu compiles vers quelle architecture cible ? Tu as suivi un tuto quelconque ?

bonjour Kran,
je ne sais pas si cela peux te mettre sur la voie mais perso pour faire de la crosscompilation (pour une archi mipsel) j’ajoute à la variable PATH le chemin de la chaine de cross compilation, typiquement un truc comme ce qui suit :

Je compile pour un eBook (l’iLiad), c’est une architecture x86… Bon le problème vient bien des paramètres du compilo dans le make. Je dois bien rajouter -I/home/usr…/include

Le problème c’est qu’apparemment ça inclut pas les sous-dossiers … c’est à dire que je dois mettre -I/…/include/glib (par exemple) mais aussi, -I/…/include/libxml et toutes les autres …

Vous savez comment faire ca ?

ben habituellement, il me semble que ca fonctionne avec des include sous la forme #include <subdir/truc.h>. A priori, un seul -I devrait suffire si tu penses à préciser le sous rep des include dans ton code.
non ?

Sinon, tu regroupes des liens symboliques dans un repertoire:[code]# cd /le/chemin/de/ton/include

mkdir tous

ln -s *.h /.h tous[/code]et tu l’utilise pour le -I

yep pas bete ! (en fait il fallait que je fasse ça, car dans la SDK ca se présente sous la forme …/include/gtk-2.0/gtk/toto.h … et dans le code tu met include <gtk/toto.h>) … Enfin bref :slightly_smiling:

C’est un peu galère de reprendre de l’open source quand tu connait deja pas les bases de la compilation croisée …

Le main ressemble à ça : (bon la c’est bourrin le début parce que c’est la version où j’ai mis tous les -I ^^)

[code]export CC=gcc
export CFLAGS=-g -Wall -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/glib-2.0
-I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/lib/glib-2.0/include -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/lib/gtk-2.0/include -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/libxml2 -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/gtk-2.0 -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/pango-1.0 -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/atk-1.0 -I/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/include/ -I./include/ -I…/include/ pkg-config --cflags gtk+-2.0 openssl libxml-2.0 glib-2.0 libcurl

LDFLAGS= -Ipwd/include/ pkg-config --libs gtk+-2.0 openssl libxml-2.0 libcurl gthread-2.0

IREXLD=-L/usr/local/lib -L/usr/local/ssl/lib -lfreetype -lfontconfig -lpng12 -lXrender -lX11 -lerdm -leripc

all: iNewsStand
noiliad : iNewsStand_noiliad

iNewsStand: main
${CC} obj/*.o ${LDFLAGS} ${IREXLD} -o iNewsStand

iNewsStand_noiliad: main_noiliad
${CC} obj/*.o ${LDFLAGS} -o iNewsStand

main:
@(cd core && ${MAKE})
@(cd gui && ${MAKE})
@(cd libfeedbooks && ${MAKE})
${CC} -o obj/main.o -c main.c ${CFLAGS}

main_noiliad:
@(cd core && ${MAKE} CFLAGS="${CFLAGS} -DNOILIAD")
@(cd libfeedbooks && ${MAKE} CFLAGS="${CFLAGS} -DNOILIAD")
@(cd gui && ${MAKE} CFLAGS="${CFLAGS} -DNOILIAD")
${CC} -o obj/main.o -c main.c ${CFLAGS} -DNOILIAD

clean:
rm -rf obj/*.o iNewsStand
[/code]

Mais maintenant j’ai une erreur à l’édition des liens :

cd '/home/user/iNewsStand' && PKG_CONFIG_PATH="/home/user/iLiadToolKit/usr/local/arm/oe/arm-linux/lib/pkgconfig/" LC_MESSAGES="C" LC_CTYPE="C" make -k Compilation main.c (gcc) Édition des liens iNewsStand (gcc) /usr/bin/ld: cannot find -lerdm collect2: ld returned 1 exit status make: *** [iNewsStand] Error 1 make: Target `all' not remade because of errors. *** Sortie avec l'état : 2 ***

une idée ? (grrrr c’est énervant quand tu vas d’erreurs en erreurs)

Mais non mais non.
Bon, tu as dit au compilo ou trouver ses include, mais maintenant, il faut que tu lui précise ou trouver les libs (les dlls qui correspondent à ce qui est décrit dans tes .h).
Ce coup ci, ajoutes un -L /le/chemin/vers/erdm.a à ta variable LDPATH, par exemple.

network-theory.co.uk/docs/gc … ro_21.html

:wink: mais oui mais oui !

EDIT : merci quand meme :slightly_smiling:

roooo bèh c’est pas possible ça … Pas moyen d’y arriver … j’ai beau ajouter le chemin vers liberdm comme tu me l’a indiqué … rien ! … C’est un peu galère quand même la manière dont c’est géré …

Tu n’as testé que l’ajout du -L dans ldflags ou bien tu as essayé aussi dans CFLAGS ?
Sinon, c’est peut être complexe (aprés tout c’est un peu normal pour un jonglage comme la cross compil), mais au moins tu tapes dans des simples modifications de paramètres dans des fichiers fichiers de config pour aller ajuster les valeurs par défaut (si c’était une compil standard, tu n’aurais rien à modifier).
Imagines si tu étais dans le monde crosoft et que tu étais obligé d’aller chercher comme d’habitude sans doc gratuite au fond des 50 onglets de configuration de ton IDE la bonne textbox à remplir pour ajuster ton paramètrage.

lol JAMAIS je m’imaginerais dans le monde de crossoft :wink: … Bon en fait pour l’instant je fait mes tests en compilant pour ma machine… je ferais les tests pour porter le soft sur l’eBook plus tard. (Du coup je repasserais surement sur ce post :wink:)

Bon … j’ai fini de développer mon soft … il compile impeccable pour mon système : maintenant faut que j’arrive à le compiler pour l’eBook (aie aie aie ! )

J’ai toujours le même problème avec cette satanée librairie -lerdm GRRrr ^^ … J’ai un paquet de message du style “skipping incompatible /CHEMIN/truc.so when searching for -librairy” ou “skipping incompatible /CHEMIN/truc.a when searching for -librairy”. Je suis à peu près au même point que les posts précédents … si un génie est dans la salle, je suis preneur :wink:

dans /CHEMIN/truc.so, est ce que /CHEMIN est cohérent par rapport à ton architecture cible ?
que dit file truc.so ?
Peux tu donner un extrait de plusieurs lignes en entier du log d’erreur ?