web-dev-qa-db-fra.com

référence non définie au symbole 'exp @@ GLIBC_2.2.5'

Une question similaire a été posée ici mais reste sans réponse.

J'ai une implémentation de Levenberg-Marquardt (téléchargé de quelque part) et j'essaye de le 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 consistait à ajouter des drapeaux (par exemple ici et ici ). Mais aucun d'entre eux n'a fonctionné pour moi.

Here est le Makefile, here est le CMakeLists.txt et here est le CMakeCache.txt.

9
Shashwat

J'ai ajouté -lm à CMakeLists.txt où des bibliothèques sont attribuées. Ça marche maintenant.

6
Shashwat

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 et -ldl dans la ligne gccque vous compilez et tout devrait bien se passer.

Sinon, dans la plupart des cas, vous pouvez également définir explicitement CFLAGSet résoudre le problème de cette manière. Ce ne sont que deux façons de résoudre,

Exemple:

user@compiler-Shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
6
Chandan Maddanna

J'ai trouvé ce fil avec un problème similaire. La solution consiste explicitement à rechercher et à modifier votre fichier CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

à

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
3
hiddeninthewifi