#1 Le 07/03/2014, à 14:55
- Muth
Cross compilation et OpenCV : undefined reference
Bonjour,
Je suis actuellement entrain de me mettre à la programmation sur Raspberry PI et notamment de l'utilisation de sa caméra PI 5M.
Je compte faire mon code en C sous Eclipse.
J'ai donc configuré Eclipse avec l'IDE C/C++ et installé angstrom pour la compilation croisée.
Mes programmes C marchent bel et bien avec l'architecture ARM du Raspberry.
Cependant, je dois maintenant utiliser la librairie OpenCV.
J'ai téléchargé et installé le package libcv-dev et fais les manip décrites sur ce lien : http://docs.opencv.org/doc/tutorials/in … lipse.html
Pourtant, quand je fais l'option "build all", la console me sort l'erreur suivante :
**** Build of configuration bb_debug for project cameraPI5M ****
make all
Building file: ../main.c
Invoking: GCC C Compiler
/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -I/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/include -I/usr/include/opencv -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c"
Finished building: ../main.c
Building target: cameraPI5M
Invoking: GCC C Linker
/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -L/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/lib -L/usr/lib -o "cameraPI5M" ./main.o -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
/usr/lib/libopencv_core.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [cameraPI5M] Error 1
**** Build Finished ****
J'ai vérifié mes chemins d'accès aux librairies, il n'y a pas de souci de ce côté là...
Merci d'avance pour toute aide apportée !
Bonne journée
Dernière modification par Muth (Le 10/03/2014, à 13:52)
Hors ligne
#2 Le 07/03/2014, à 15:11
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Bonjour,
Je pense que le fichier '/usr/lib/libopencv_core.so' indiqué dans l'erreur est celui de Linux (gcc) et non celui attendu par le cross-compilateur pour Arm (arm-angstrom-linux-gnueabi-gcc).
Que donne la commande 'file' ?
$ file /usr/lib/libopencv_core.so
$ file <un fichier produit par le cross-compilateur comme './main.o'>
Cordialement, A+
--
Claudius
Hors ligne
#3 Le 07/03/2014, à 15:38
- Muth
Re : Cross compilation et OpenCV : undefined reference
Bonjour,
Tout d'abord, merci de m'aider à résoudre ce problème
La première ligne de commande donne :
file /usr/lib/libopencv_core.so
/usr/lib/libopencv_core.so: symbolic link to `libopencv_core.so.2.3'
La seconde donne ceci :
file ./main.o
./main.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
Hors ligne
#4 Le 07/03/2014, à 15:49
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Très bien pour le './main.o'
Quant à l'autre, refaire la commande 'file' sur le fichier pointé sur le lien ('libopencv_core.so.2.3' qui peut être aussi un lien ;-)
Hors ligne
#5 Le 07/03/2014, à 15:57
- Muth
Re : Cross compilation et OpenCV : undefined reference
Je viens de refaire la commande :
file /usr/lib/libopencv_core.so.2.3
/usr/lib/libopencv_core.so.2.3: symbolic link to `libopencv_core.so.2.3.1'
Je me suis douté qu'il fallait continuer jusqu'à ne plus avoir de lien symbolique donc j'ai refait la manip :
file /usr/lib/libopencv_core.so.2.3.1
/usr/lib/libopencv_core.so.2.3.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x51f0adbb88d6fe3ec55cc9ac3b67f645314e5d8d, stripped
Voilà
Hors ligne
#6 Le 07/03/2014, à 16:06
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Parfait, diagnostic confirmé:
1) ./main.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
2) /usr/lib/libopencv_core.so.2.3.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x51f0adbb88d6fe3ec55cc9ac3b67f645314e5d8d, stripped
Y'a plus qu'à mettre la main sur le projet OpenCv pour ARM ;-)
Edit: Il semble que le sujet a été abordé: cf. Recherche OpenCV + ARM sur le forum
Dernière modification par claudius01 (Le 07/03/2014, à 16:48)
Hors ligne
#7 Le 07/03/2014, à 16:47
- Muth
Re : Cross compilation et OpenCV : undefined reference
Merci pour l'aide, je viens de faire les étapes de ce petit tuto !
Je rencontre cependant une nouvelle difficulté :
cmake -DSOFTFP=ON -DCMAKE_TOOLCHAIN_FILE=~/../../usr/include/opencv/platforms/linux/arm-gnueabi.toolchain.cmake ~/../../usr/include/opencv
CMake Error: The source directory "/usr/include/opencv" does not appear to contain CMakeLists.txt.
Donc j'entends bien que le fichier CMakeLists.txt n'est pas dans le dossier "opencv" mais n'est-ce pas le but de cette manipulation que de le créer ?
Pour la compréhension :
Je suis en "CD" dans un répertoire "build_softfp" que j'ai créé dans mon projet C (/home/moi/projet/build_softfp)
Le chemin suivant
~/../../usr/include/opencv/
est le chemin qui mène aux sources de l'opencv depuis le répertoire courant.
Hors ligne
#8 Le 07/03/2014, à 16:55
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Désolé, je n'utilise pas CMake
=> Peut-être qu'une bonne âme peut prendre le relais
Sinon, j'ai reédité mon précédent post #6 avec les fils de discussion sur notre forum concernant ce sujet
Hors ligne
#9 Le 07/03/2014, à 17:01
- Muth
Re : Cross compilation et OpenCV : undefined reference
Oui, j'ai vu l'édit
J'étais déjà allé voir ce lien mais je n'ai pas réussi à en extraire une solution pour moi...
Et si tu as une solution sans CMake, je suis preneur^^ (Au stade où j'en suis, je ne sais pas si on peut dire que j'ai utilisé CMake x))
Merci quand même en tout cas même si tu ne peux pas m'aider davantage
Hors ligne
#10 Le 07/03/2014, à 17:26
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Ok merci...
S'agissant de "Et si tu as une solution sans CMake...", sauf erreur de ma part, je pense que c'est faisable de tout faire avec gmake en recréant à l'identique la production avec toutes les options de compilation / édition de lien dans un makefile
=> Si ce n'était pas le cas, que celui qui sait le dise ou qu'il se taise à jamais ;-)
Sinon, ce projet OpenCV ne serait-il pas déjà disponible pour la Framboise/ARM avec ses librairies, dépendances et autres include ?
=> Cela serait bien, vu le nombre de gens qui rament ;-(
Hors ligne
#11 Le 10/03/2014, à 11:56
- Muth
Re : Cross compilation et OpenCV : undefined reference
Re-bonjour !
J'ai tout réinstallé et repris les étapes les unes après les autres.
J'ai réussi à trouver mon problème sauf qu'un autre a fait son apparition...
Voici les erreurs que me ressort un "build" :
/lib/libopencv_core.so: undefined reference to `__aeabi_atexit@CXXABI_ARM_1.3.3'
/lib/libopencv_core.so: undefined reference to `std::__detail::_List_node_base::_M_unhook()@GLIBCXX_3.4.15'
/libopencv_highgui.so: undefined reference to `__fdelt_chk@GLIBC_2.15'
/lib/libopencv_core.so: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)@GLIBCXX_3.4.15'
/lib/libopencv_core.so: undefined reference to `std::ctype<char>::_M_widen_init() const@GLIBCXX_3.4.11'
/lib/libopencv_contrib.so: undefined reference to `std::__detail::_List_node_base::swap(std::__detail::_List_node_base&, std::__detail::_List_node_base&)@GLIBCXX_3.4.15'
/lib/libopencv_calib3d.so: undefined reference to `std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*)@GLIBCXX_3.4.15'
/lib/libopencv_highgui.so: undefined reference to `__longjmp_chk@GLIBC_2.11'
collect2: ld returned 1 exit status
make: *** [cameraPI5M] Error 1
Apparemment il me manque des fichiers GLIBC mais j'ai installé le package libglib-2.0.0 qui est la dernière (aucune update possible via console). Je ne sais pas comment fixer ce problème du coup...
J'ai fait des recherches mais rien de bien concluant pour régler mon souci... Si vous avez des pistes, je suis preneur !
Merci
Hors ligne
#12 Le 11/03/2014, à 14:13
- claudius01
Re : Cross compilation et OpenCV : undefined reference
Bonjour,
Je crains que la glibc version 2.0.0 soit un peu vieillotte (au vu de http://www.gnu.org/software/libc/ et http://www.gnu.org/software/libc/)
Cordialement, A+
--
Claudius
Hors ligne