我正在使用不同版本的 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/