gpt4 book ai didi

c++ - 如何知道我的程序在运行时调用了哪个 'sin' 函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:49 25 4
gpt4 key购买 nike

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

谢谢。

最佳答案

Question 1. I heard about various tools like objdump, gdb.

与 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

Question 2. How can I enforce fdlibm's libm.a be used?

只需确保 fdlibm 的 sin 出现在 libm 的 sin 之前

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com