【发布时间】:2015-06-24 13:45:56
【问题描述】:
我正在使用不同版本的 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?
谢谢。
【问题讨论】:
-
你在问当你调用未定义的行为时会发生什么。重新定义标准库函数(例如,
sin)是未定义的行为。 -
@David 感谢您的帮助。顺便说一句,你的意思是什么?
-
@David Hammen,您能否提供参考证明您对 UB 的陈述?
-
作为OP问题的后续,为什么在这种情况下编译器不会警告多个函数定义?
-
@Carlton - 这不是错误。
sin是一个 libc 函数,您可以提供自己的函数。这就是为什么命令行中库的顺序很重要的原因
标签: c++ static-linking