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


11

同様の質問がここで尋ねられましたが、答えはありません。

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

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

ここでは、Makefileのあるここ CMakeLists.txtで、ここ CMakeCache.txtです。


glibcのバージョンは何ですか?
nixeagle 2014

ldd --version与えた(Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19
Shashwat

Makefileを含めてください。これは明らかにライブラリの依存関係が壊れている(そしてglibバージョンの不一致の可能性がある)ものです。
nixeagle 2014

2
追加してみました-lmか?どこに追加しましたか?
muru、2014

@Shashwat:どこに追加したのですか?コードを投稿していただけますか?ありがとう

回答:


8

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

だから-lm、あなたはコンパイル-ldlしているgcc行で、それはうまくいくはずです。

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

例:

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

6

ライブラリが割り当てられている場所に追加-lmしましたCMakeLists.txt。それは今働いています。


4
追加を詳細に示すことができますか?ありがとう
Lucio

3

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

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.