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

11

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.

Shashwat
la source
Quelle est votre version glibc?
nixeagle
ldd --versiona donné (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat
Veuillez inclure votre Makefile. C'est clairement quelque chose avec des dépendances de bibliothèque cassées (et des incompatibilités de version glib possibles).
nixeagle
2
Êtes-vous sûr d'avoir essayé d'ajouter -lm? Où l'avez-vous ajouté?
muru
@Shashwat: Où exactement avez-vous ajouté cela? Pouvez-vous s'il vous plaît poster le code? Merci

Réponses:

8

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, -ldldans la gccligne que vous compilez et cela devrait aller très bien.

Alternativement, dans la plupart des cas, vous pouvez également définir CFLAGSet atténuer explicitement le problème de cette façon. 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";
Chandan Maddanna
la source
6

J'ai ajouté -lmdans CMakeLists.txtoù les bibliothèques sont affectées. Ça marche maintenant.

Shashwat
la source
4
Pouvez-vous montrer l'ajout en détail? Merci
Lucio
3

J'ai trouvé ce fil avec un problème similaire. De manière explicite, la solution consiste à rechercher et à modifier votre fichier CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

à

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
hiddeninthewifi
la source