1

maketa-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
4

0 に答える 0