使用libm.so的未定义引用构建ta-lib库失败

时间:2015-07-01 21:38:21

标签: c++ finance ta-lib

尝试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

这是一个未定义的引用(它们都在那里)。我无法确定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

0 个答案:

没有答案