referensi yang tidak terdefinisi ke simbol 'exp @@ GLIBC_2.2.5'

11

Pertanyaan serupa telah diajukan di sini tetapi tidak dijawab.

Saya memiliki implementasi Levenberg-Marquardt(diunduh dari suatu tempat) dan saya mencoba mengkompilasinya tetapi mendapatkan kesalahan berikut.

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

Di banyak situs, solusi yang diberikan adalah menambahkan beberapa bendera (misalnya di sini dan di sini ). Tapi tidak ada yang bekerja untuk saya.

Berikut adalah Makefile, di sini adalah CMakeLists.txt dan di sini adalah CMakeCache.txt.

Shashwat
sumber
Apa versi glibc Anda?
nixeagle
ldd --versionmemberi (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat
Harap sertakan Makefile Anda. Ini jelas sesuatu dengan dependensi library yang rusak (dan kemungkinan ketidakcocokan versi glib).
nixeagle
2
Anda yakin sudah mencoba menambahkan -lm? Di mana Anda menambahkannya?
muru
@Shashwat: Di mana tepatnya Anda menambahkan ini? Bisakah Anda memposting kode? Terima kasih

Jawaban:

8

Sepertinya pengguna yang menemukan solusi tidak pernah membagikannya nanti. Untuk pria yang mencoba mencari solusinya cukup tambahkan perpustakaan matematika secara eksplisit dan juga tambahkan-ldl

Jadi -lmdan -ldldi gccbaris Anda mengkompilasi dan itu akan baik-baik saja.

Atau, dalam banyak kasus Anda juga dapat secara eksplisit mendefinisikan CFLAGSdan mengurangi masalah dengan cara itu. Ini hanya dua cara pemecahan,

Contoh:

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

Saya telah menambahkan -lmke CMakeLists.txttempat perpustakaan ditugaskan. Ini bekerja sekarang.

Shashwat
sumber
4
Bisakah Anda menunjukkan tambahan secara detail? Terima kasih
Lucio
3

Saya menemukan utas ini dengan masalah yang sama. Secara eksplisit, solusinya adalah menemukan dan mengubah file CMakeLists.txt Anda:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

untuk

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