Une question similaire a été posée ici mais reste sans réponse.
J'ai une implémentation de Levenberg-Marquardt
(téléchargée quelque part) et j'essaie de la compiler mais j'obtiens l'erreur suivante.
gauravloj@vertex:~/Documents/source_code/non-rigid_registration/Gauss_newton/levmar-2.6$ make
[ 87%] Built target levmar
Linking C executable lmdemo
/usr/bin/ld: CMakeFiles/lmdemo.dir/lmdemo.c.o: undefined reference to symbol 'exp@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [lmdemo] Error 1
make[1]: *** [CMakeFiles/lmdemo.dir/all] Error 2
make: *** [all] Error 2
Sur de nombreux sites, la solution proposée a été d'ajouter des indicateurs (par exemple ici et ici ). Mais aucun d'eux n'a travaillé pour moi.
Voici le Makefile, voici le CMakeLists.txt et voici le CMakeCache.txt.
ldd --version
a donné(Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19
.-lm
? Où l'avez-vous ajouté?Réponses:
On dirait que l'utilisateur qui a trouvé la solution ne l'a jamais partagée plus tard. Pour les gars qui essaient de trouver la solution, ajoutez simplement la bibliothèque mathématique explicitement et ajoutez également
-ldl
Donc
-lm
,-ldl
dans lagcc
ligne que vous compilez et cela devrait aller très bien.Alternativement, dans la plupart des cas, vous pouvez également définir
CFLAGS
et atténuer explicitement le problème de cette façon. Ce ne sont que deux façons de résoudre,Exemple:
la source
J'ai ajouté
-lm
dansCMakeLists.txt
où les bibliothèques sont affectées. Ça marche maintenant.la source
J'ai trouvé ce fil avec un problème similaire. De manière explicite, la solution consiste à rechercher et à modifier votre fichier CMakeLists.txt:
à
la source