make
ta-lib ライブラリ (ta-lib-0.4.0-src.tar.gz) を試してみると、次のエラーが表示されます。
/home/me/ta-lib/src/.libs/libta_lib.so: undefined reference to `sinh'
/home/me/ta-lib/src/.libs/libta_lib.so: undefined reference to `sincos'
/home/me/ta-lib/src/.libs/libta_lib.so: undefined reference to `ceil'
...
多数の数学関数用。
失敗したコマンドは次のようになります。
gcc -g -O2 -o .libs/ta_regtest (... .o files) -L/home/me/ta-lib/src \
/home/me/ta-lib/src/.libs/libta_lib.so -lm -lpthread -ldl
問題のあるライブラリ (ta_lib) は次のようになります。
objdump -TC libta_lib.so | grep " D \*UND\*"
0000000000000000 D *UND* 0000000000000000 sinh
0000000000000000 D *UND* 0000000000000000 sincos
0000000000000000 D *UND* 0000000000000000 ceil
...
同じ数学関数の場合 (grep は、定義された関数と "w" (おそらく弱い) フラグを持つ関数を除外します)
マップには、含まれているライブラリがリストされています。
LOAD /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libm.so
また、libm.so で定義されているシンボル (objdump -TC) のリストには以下が含まれます。
000000000001a320 w iD .text 0000000000000020 GLIBC_2.2.5 ceil
これは未定義の参照の 1 つでした (それらはすべてそこにあります)。GLIBC_2.2.5 の意味がわかりません。
ローダーがこれらの関数を見つけられないのはなぜですか?
私のシステムは次のようになります。
$ uname -a
Linux mynode 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux