同様の質問が行われました 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 )。しかし、それらのどれも私のために働きませんでした。
ライブラリが割り当てられている-lm
にCMakeLists.txt
を追加しました。今は機能しています。
ソリューションを見つけたユーザーが後で共有したことはないようです。解決策を見つけようとしている人のために、数学ライブラリを明示的に追加し、-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";
このスレッドには同様の問題が見つかりました。明示的に、解決策はCMakeLists.txtファイルを見つけて変更することです。
TARGET_LINK_LIBRARIES(lmdemo ${LIBS})
に
TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})