我正在使用不同版本的 libm.a。我正在使用的一个是 fdlibm 的 libm.a(来自 Sun)。
问题是我觉得我的程序并没有调用fdlibm的libm.a中的函数,而是调用了系统的glibc的libm.a中的函数。

#include "fdlibm.h"
int main(){
  double x = sin(3);
}
该程序是编译的C++程序(因为它必须与其他C++程序链接):
g++ prog.cpp libm.a
其中 libm.a 是 fdlibm 的。 (来自太阳,http://www.netlib.org/fdlibm/readme)
问题 1
我怎么知道 sin 在运行时实际调用了什么?我听说过各种工具,如 objdump、gdb... 哪一种可以用于我的情况以及如何使用?
问题2
如何强制使用 fdlibm 的 libm.a?
谢谢。

最佳答案



与 gdb 一样。
创建文件 trace_sin.gdb

$ cat trace_sin.gdb
set confirm off
b sin
commands
bt
c
end
r
quit

并运行你的程序:
$ gdb -q -x trace_sin.gdb   ./a.out Reading symbols from ./a.out...(no
debugging symbols found)...done. Breakpoint 1 at 0x400498

Breakpoint 1, 0x000000314941c760 in sin () from /lib64/libm.so.6
#0  0x000000314941c760 in sin () from /lib64/libm.so.6
#1  0x0000000000400629 in main ()

正如你在我的例子中看到的 sin 来自 libm



只要确保来自 fdlibm 的 sin 出现在 libm 的 sin 之前

关于c++ - 如何知道我的程序在运行时调用了哪个 'sin' 函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31028364/

10-11 15:38