#1 Le 24/01/2014, à 18: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, à 14: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, à 18: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, à 00: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