web-dev-qa-db-ja.com

シンボル「exp @@ GLIBC_2.2.5」への未定義の参照

同様の質問が行われました here ですが、未回答です。

Levenberg-Marquardt(どこかからダウンロードした)の実装があり、コンパイルしようとしていますが、次のエラーが発生します。

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

多くのサイトで与えられた解決策は、いくつかのフラグを追加することでした(例 here および here )。しかし、それらのどれも私のために働きませんでした。

ここ はMakefile、 ここ はCMakeLists.txt、 here はCMakeCache.txtです。

9
Shashwat

ライブラリが割り当てられている-lmCMakeLists.txtを追加しました。今は機能しています。

6
Shashwat

ソリューションを見つけたユーザーが後で共有したことはないようです。解決策を見つけようとしている人のために、数学ライブラリを明示的に追加し、-ldlも追加してください

したがって、コンパイルしているgcc行の-lm-ldlは正常に動作するはずです。

あるいは、ほとんどの場合、CFLAGSを明示的に定義して、その方法で問題を軽減することもできます。これらは解決する2つの方法にすぎません。

例:

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

このスレッドには同様の問題が見つかりました。明示的に、解決策はCMakeLists.txtファイルを見つけて変更することです。

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

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