Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/01/2014, à 19:14

wolffy

croos-compilation, crosstool-ng, opencv

Bonjour à tous,

Je suis sous ubuntu 12.04LTS, et je cherche à faire de la cross-compilation pour un projet dont la cible est raspberry pi avec un programme en c++ utilisant principalement la
librairie opencv.
J'utilise crosstool-ng. Lors de son installation, je n'ai eu aucun problème et un test hello world c'est bien passé.
Seulement, lorsque j'ai voulu cross-compiler mon programme, j'ai eu ce message d'erreur

arm-unknown-linux-gnueabi-g++ `pkg-config --cflags opencv` ../RaspVideo/main.cpp `pkg-config --libs opencv` -o testCrossRasp
/usr/local/lib/libopencv_calib3d.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

Naturellement, je suis aller chercher des infos sur le net,
site_opencv
autre
autre
et j'en passe
et tenté les solutions trouvées (path ...)  mais aucun résultat.

je tente donc ici en espérant que quelqu'un aurait peut être déjà eu ce problème.

merci d'avance

Hors ligne

#2 Le 25/01/2014, à 15:00

darunia_goron

Re : croos-compilation, crosstool-ng, opencv

Tu essaies de compiler un programme ARM avec une bibliothèque x86/x64 (libopencv_calib3d.so). Tu dois dans un premier temps cross-compiler toutes les bibliothèques que tu souhaites utiliser. Si tu possèdes déjà la bibliothèque compilé pour ARM, tu peux indiquer au compilateur son emplacement avec l'option -L. Ensuite seulement tu pourras compiler ton programme.

Pour l'instant, je te laisse te débrouiller avec cette petite piste.

Hors ligne

#3 Le 25/01/2014, à 19:11

wolffy

Re : croos-compilation, crosstool-ng, opencv

salut et merci darunia,

j'ai donc essayé de comprendre ce dont tu parles.
j'ai regarder comment compiler une librairie et j'ai trouvé notamment cette réponse
./configure --host=arm-linux
make
make install

seulement dans la librairie opencv, pas de ./configure et la je me suis rappelé de l'histoire des fichiers toolchain.cmake et je suis donc retourné
ici http://docs.opencv.org/doc/tutorials/in … cmake.html
je me suis dis que j'avais peut être mal fait les choses.

puis j'ai continué par

export PATH="${PATH}:/home/freddy/x-tools/arm-unknown-linux-gnueabi/bin"
arm-unknown-linux-gnueabi-g++ ../RaspVideo/main.cpp -o testCrossRasp -L /usr/local/lib/ `pkg-config --cflags opencv` `pkg-config --libs opencv`

mais cela n'a rien changé.

pour info la commande pkg-config --libs opencv me donne le résultat suivant:
/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

pour conclure, je pense que je ne dois pas cross-compiler la librairie comme il se doit, pourtant je suis le site d'opencv mais il doit me manquer quelque chose.
Je me suis demander si il ne fallait pas cross-compiler avec la commande arm-linux-gnueabi-g++ mais je trouve cela bizarre
pourrais tu me donner une autre piste stp concernant la cross-compilation d'une librairie car je ne vois pas ce que je loupe

merki en tout cas

Hors ligne

#4 Le 26/01/2014, à 01:17

darunia_goron

Re : croos-compilation, crosstool-ng, opencv

Il est vrai que beaucoup d'outil GNU se compilent avec ./configure, make et make install mais ce n'est pas toujours le cas. En l’occurrence, openCV utilise cmake.
Reporte-toi au paragraphe Building OpenCV de la page que tu as fourni pour la compilation.

Aussi, tel quel pkg-config te fourni les liens vers les bibliothèques x86/x64. Je ne suis pas certain de comment utiliser pkg-config pour de la cross compilation mais j'ose penser qu'il y a une alternative (si tu la trouves, poste la car ça m'intéresse).
J'ai quand même une piste à te donner : typiquement, lorsque une bibliothèque est installée sur ta machine, un fichier .pc est créé. C'est ce fichier qu'utilise pkg-config. Il faut que tu trouves un moyen de dire à pkg-config d'aller chercher le .pc de la bibliothèque ARM que tu auras compilé à la place de la bibliothèque x86/x64 déjà présente sur ta machine.
Bien sûr, tu peux passer outre pkg-config et passer toute les options de compilations ad-hoc à la main au compilateur.

Hors ligne